Skip to content

chore(deps): upgrade portable-pty to 0.9.0 #3029

Closed

Description

@mblua

Request and current authorization

The user requested investigation and a reviewed plan to update AgentsCommander's PTY library to the latest published version. This ticket tracks the eventual dependency upgrade; the current assignment is planning only. Do not implement, update Cargo manifests/lockfiles, run application builds or interactive tests, open a PR, or merge as part of this planning request.

Verified starting point

  • Registry checked 2026-10-15: latest stable/max/newest portable-pty release is 0.9.0, not yanked, published 2025-02-11. Official package checksum b4a596a2b3d2752d94f51fac2d4a96737b8705dddd311a32b9af47211f08671e. Reconfirm at implementation intake; do not silently replace an agreed target if the registry changes.
  • AgentsCommander base a1a694b: src-tauri/Cargo.toml:15 and crates/session-bridge/Cargo.toml:9 declare 0.8; root Cargo.lock resolves 0.8.1.
  • Source comparison found no mandatory Rust call-site adaptation, but no updated build/runtime was performed. Child::as_raw_handle was already required in 0.8.1 and the local test implementation already supplies it.
  • Windows 0.9.0 changes ConPTY cursor inheritance. Upstream portable-pty 0.9.0 doesn't work on windows wezterm/wezterm#6783 discusses an unanswered cursor-position query and possible startup deadlock; this is not an observed AgentsCommander regression. Investigation must address actual startup/hidden/attach behavior in both consumers.
  • Unix changes executable search through PATH/cwd, preserves inherited SHELL, clears the child's blocked signal mask, and adds tty_name. 0.9.0 also changes serial API/dependencies. portable-pty aborts on exec failure instead of returning a spawn error wezterm/wezterm#7742 reports Unix exec-error handling; do not assume this is introduced by 0.9.0 or expand into unrelated upstream repairs.

Required plan and acceptance

  1. Inspect both consumers and their existing tests from a verified base; identify exact files, dependency resolution, necessary compatibility adaptations and reusable verification. State what is observed versus proposed.
  2. Produce the smallest complete implementation plan for latest stable portable-pty, including exact target, scope, failure behavior, platform/runtime risks, future verification commands, and rollback limited to this change.
  3. Obtain explicit author, Rust developer, Rust Grinch and architecture Grinch consensus on the same immutable plan version and SHA-256. Resolve substantive findings without adding optional work as gates.
  4. Deliver the plan, consensus evidence and any genuinely unresolved prerequisite to the user. Keep implementation/test/build/merge authorization separate; marking a candidate READY does not authorize execution.
  5. The eventual upgrade must preserve successful session startup, terminal I/O and replies, resize and cleanup, with Windows and supported Unix behavior covered proportionately. No claim of performance improvement is required.

Exclusions

No redesign of the PTY subsystem, integration of the capture tool, new capture product, activity/Working detector work, general dependency refresh, broad test infrastructure, or unrelated issue repair. Any newly discovered necessary extension must be surfaced explicitly.

Evidence

No implementation branch or PR exists for this planning request. Create the issue branch from synchronized main only when the authorized workflow requires it for implementation.

Activity

  1. added
    enhancementNew feature or request
    windowsAffected platform: the behaviour occurs on or is specific to Windows
    linuxAffected platform: the behaviour occurs on or is specific to Linux
    macosAffected platform: the behaviour occurs on or is specific to macOS
    on Oct 15, 2026
  2. mblua commented on Oct 15, 2026

    @mblua
    OwnerAuthor

    I3029 — authorized planning intake, 2026-10-15

    Issue: #3029
    User request: "ok, investiguen y hagan el plan para el update a la última versión de la libreria".
    Current deliverable is investigation and an implementation-ready reviewed plan only. No product/dependency/lock edits, application builds, runtime/interactive tests, implementation, push, PR or merge are authorized by this request. Existing findings are reused and verified where relevant. This intake records scope and evidence, not the technical solution or implementation approval.

    Latest stable from crates.io API verified 2026-10-15: portable-pty 0.9.0, not yanked; checksum B4A596A2B3D2752D94F51FAC2D4A96737B8705DDDD311A32B9AF47211F08671E. https://docs.rs/crate/portable-pty/latest agrees. Reconfirm before later implementation and reconcile any target change instead of silently substituting it.
    Repo: D:/0_repos/AgentsCommander_iac/.ac/room-18-ac-dev-team-v5/repo-AgentsCommander; main = origin/main = a1a694b, clean at intake. Branch creation deferred because current request is planning only; proposed future branch chore/3029-portable-pty-upgrade is not yet created.
    Prior v2 comparison/consultation plan does not authorize this implementation plan. Its exact-version consensus and reports remain useful investigation evidence, not approval for a new candidate.

    Workflow: code-implementation-workflow, architect-authored Full contract (compact, proportional specification; no forced phase split). Upstream changes startup protocol and Unix compatibility in a shared multi-threaded PTY path. Score is 36/100; Concurrency>=10 and Verification>=8 apply. Required initial consensus participants for every candidate version: ac-architect-v5 author, ac-dev-rust-v5 feasibility, ac-dev-rust-grinch-v5 risk/proof, ac-architect-grinch-v5 architecture/minimum scope. All four must approve identical Plan-SHA256. Planning round may author/review a candidate before consensus; implementation remains gated. Immutable versions under this directory follow shared Guidelines/code-change-plans.md and code-change-plan-template.md; first plan path plan-v1-portable-pty-upgrade.md.

    Scope and evidence

    Upgrade the actual portable-pty consumers of AgentsCommander to latest published stable, with only required adaptations and meaningful regression verification. Preserve current successful launch, I/O and terminal replies, resize and cleanup. Investigate Windows cursor-query startup for visible/hidden/late-attach sessions and session-bridge; Unix executable resolution, environment and signals; dependency resolution and actual supported targets. Plan must distinguish unexecuted future checks from source evidence and define how necessary blockers are handled without silently selecting a design during implementation.

    Known references at base: src-tauri/Cargo.toml:15, crates/session-bridge/Cargo.toml:9 (0.8 declarations); root Cargo.lock:4518 (0.8.1). No mandatory Rust adaptation found in previous source review, not proof of compile/runtime. Child::as_raw_handle exists in both versions and PoisonedChild already implements it. Upstream 0.9 Windows adds INHERIT_CURSOR; #6783 discusses unanswered position query. Unix PATH/cwd/SHELL and signal-mask behavior changed. API adds tty_name, Downcast/Send, signal getter; serial2 replaces serial. #7742 is an open Unix exec-error report, not proven introduced by this upgrade; no authorization for a general upstream repair.

    Reusable shared evidence (absolute roots below):

    Excluded: capture tool integration, PTY redesign, Working/activity detectors, general dependency updates, optional infrastructure, unrelated bug repairs. If scope extension proves necessary, identify it and its evidence explicitly. Do not discard an added feature based only on coordinator judgment; user decides scope extensions. Future interactive/image/mouse/keyboard testing requires user consultation before delegation under Role.md; this planning assignment executes none.

    Technical scoring v1

    Category Score Anchor and justification
    Scope footprint 3 Near one-file anchor: two known manifests and generated lock; only necessary verification/adaptation may add files.
    Diagnosis difficulty 7 Below reproducible unfamiliar-subsystem anchor 10: source risks identified, actual startup behavior still needs tracing.
    Domain knowledge 10 Protocol/parser anchor 10: ConPTY cursor exchanges and Unix process launch contracts.
    Solution-space ambiguity 4 Near determined-change anchor 1: latest stable identified; source inspection decides whether startup adaptations are needed.
    Blast radius and reversibility 9 Shared-path anchor 10: terminal startup across consumers; targeted dependency rollback is possible.
    Dependency and integration 10 External-library anchor 10: upstream API/runtime behavior and transitive dependencies.
    Verification difficulty 11 New-test-with-harness anchor 10: startup without attached renderer and both consumer paths must distinguish pass from hidden deadlock.
    State/data/compatibility 4 Near stateless anchor 1: no persisted schema migration, but launch and API compatibility change.
    Concurrency and timing 10 Async/multi-threaded anchor 10: startup cursor request, reader and attach ordering with existing ownership.
    Environment/tooling 10 Platform-specific anchor 10: Windows ConPTY and Unix process behavior; developer must state environment risk before code.

    Raw 78. Final round((78-10)/190*99)+1 = 36/100. Excluded ceremony: issue, branch/PR, messaging, review rounds, CI waiting, merging, release/version bookkeeping. No score inflation for process.

    Planning completion requires the concrete full plan, source-backed review verdicts with identical digest, material issue/reviewer questions resolved or honestly reported. A ready plan does not authorize execution; stop after delivering planning result to user.

  3. mblua commented on Oct 15, 2026

    @mblua
    OwnerAuthor

    I3029 — round 1 consolidated result

    Candidate full version2: plan-v2-portable-pty-upgrade.md, Plan-SHA256 919E25825F128DEF4C8C8178E00B082AF180D7DD5212AB4923AB50B260F78AF4. Version1 was a truncated authoring artifact, not a second review round. Both preserved unchanged.

    Participant Exact-v2 result Evidence from .ac
    ac-architect-v5 NEEDS_ANOTHER_ROUND; no author approval room-18-ac-dev-team-v5/messaging/20261015-235800-room18-ac-architect-v5-to-room18-ac-tech-lead-v5-i3029-candidate-v2.md
    ac-dev-rust-v5 CHANGES_REQUIRED room-18-ac-dev-team-v5/room-shared/i3029-rust-feasibility-r1.md
    ac-dev-rust-grinch-v5 CHANGES_REQUIRED room-18-ac-dev-team-v5/room-shared/i3029-rust-review-r1.md
    ac-architect-grinch-v5 CHANGES_REQUIRED room-18-ac-dev-team-v5/room-shared/i3029-architecture-review-r1.md

    Required reviewer approvals: 0/3, author approval absent. This is the round1 comparison baseline.

    Consolidated findings

    1. B1 remains: the traced local backend/fanout/history/Telegram/WS path has no autonomous cursor reply before a visible xterm; the existing startup gate can also hold resize until first paint. Published0.9.0 adds INHERIT_CURSOR, while source does not establish whether a specific system conhost actually waits. Both Grinches propose a bounded0.8.1/0.9.0/0.9.0-with-response experiment. User permission requested asynchronously for those three concrete runs; no answer/authorization yet and no test delegated/executed.
    2. B2 remains partly unresolved: exact Windows hidden-session first-marker acceptance and minimal executable selectors/assertions must replace generic rows. Unix existing tests and CI can be reused, but reviewer disagreement remains over extra Unix cases and whether a new native-Windows bridge harness is necessary. Architecture Grinch says actual bridge deployment is Docker Linux; Rust points to cross-platform native entry. Author must settle actual supported production contracts and proportionate coverage from source, not silently choose one reviewer's assertion.
    3. New specific incompatibility: local_backend.rs:4596-4613 requires upstream0.8.1 error fragment was not found in PATH;0.9.0 changes it. Update the plan to preserve semantic negative-test assertion. This is source-based inference, not an executed failure. It makes a literal three-path-only hypothesis insufficient.
    4. Operational clarity: edit manifest requirements before directed cargo update; use canonical safe-main sync flow. Correct any incorrect claims that absence of INHERIT_CURSOR means no application can ever ask a VT position query. Reuse published archive citations rather than requiring peer home/cache access.

    Scope/authority reconciliation

    User asked for investigation and a plan to update the library, without a three-file restriction. Intake allowed necessary adaptations and verification. The three-path statement in v2 is an unapproved hypothesis, not a user prohibition. Planning the necessary Unix assertion adaptation fits that request; do not add a redundant user approval solely for that path. New product behavior/redesign/capture integration remains outside scope. No implementation is authorized.

    Runtime/input exclusion and user-consultation gate remain effective: the isolated probe's automatic cursor response injects input. Concrete permission question pending; elapsed time is not consent. Author may continue independent static planning, reconcile review conflicts and specify the proposed probe/future regression procedure without executing them. No ready claim while material B1/decision remains unresolved.

    Next candidate must incorporate the Unix test expectation, settle supported bridge/Unix coverage, make the verification executable and either close B1 with permitted evidence or explicitly retain its real prerequisite. Same four participants, new immutable version and matching digests; no vote transfer. No code edits, tests, builds or product run occurred.

  4. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    I3029 — authorization for three isolated Windows probes

    User response in active conversation: "dale, haganlas". This explicitly approves the immediately preceding concrete proposal: three disposable portable-pty Windows runs, 0.8.1 control, 0.9.0 without cursor reply, 0.9.0 with automatic cursor reply; only cmd.exe /c echo READY, bounded runtime and owned-process cleanup, no GUI/capture/physical input and no AgentsCommander product changes.

    This is the exact exception to the runtime/input exclusion in intake-v1.md and plan-v2-portable-pty-upgrade.md requested by both Grinches. Permission does not approve the product plan, dependency updates, deployment, or additional application tests. Do not ask for this permission again. The user-authorized investigation includes the disposable fixture/artifact preparation necessary to perform these three probes.

    Reviewed recipe: room-18-ac-dev-team-v5/room-shared/i3029-rust-review-r1.md and i3029-architecture-review-r1.md from .ac. Product candidate remains v2, SHA256 919E25825F128DEF4C8C8178E00B082AF180D7DD5212AB4923AB50B260F78AF4; it has no implementation consensus. These probes gather B1 evidence; they are not implementation of the upgrade.

    Scope: run the same minimal openpty24x80 -> cmd.exe /c echo READY observation with exact published0.8.1 and0.9.0, capture raw bytes/hex, marker/exit/elapsed/query/reply events. Two cases write no PTY input; response case writes only ESC[1;1R after observing ESC[6n. Observe at most10seconds per case and bound the entire case externally (30seconds or the reviewed necessary bound). A control sequence alone is not READY; zero bytes is not PASS. Report whether spawning itself, first marker or exit blocks. Preserve the actual library's non-returning behavior rather than hiding a hang behind an unbounded join/drop. Kill/clean only the experiment's own processes if required and report proof/uncertainty.

    Paths: fixture and evidence only in D:/0_repos/AgentsCommander_iac/.ac/room-18-ac-dev-team-v5/room-shared/i3029-pty-probe/. No product repo/lock/config edits, worktree, global settings change, installation, or general test infrastructure. Source owner chooses smallest fixture consistent with reviewed recipe, records exact source/dependency digests. Build outputs and Cargo output/cache overrides remain within authorized scratch; no application build. OS/process metadata and published source inspection are allowed. Base repo for provenance is D:/0_repos/AgentsCommander_iac/.ac/room-18-ac-dev-team-v5/repo-AgentsCommander, source-investigation base a1a694b (not a claim the standalone probe is an AC executable).

    Owners: ac-dev-rust-v5 authors the disposable investigation fixture; ac-dev-rust-grinch-v5 verifies its observation and bounded cleanup against the approved three-case recipe; ac-shipper-v5 builds the reviewed source and supplies paths/source digest/dependency versions/exe SHA256/bytes/toolchain/commands; ac-cli-tester-v5 independently verifies artifact provenance and executes only the three approved cases. Tester does not build, copy/rename artifacts, or change product. Coordinator routes artifacts and accepts concrete results. This is a standalone library probe, not a packaged AgentsCommander test: do not build or relabel an AgentsCommander executable as a substitute. Preserve the skill's provenance, isolation, input permission and result requirements.

    Return evidence once per actual run, not repeated experiments for ceremony. If a case is inconclusive because the fixture is defective, report concrete limitation before any extra input/runtime beyond the approved contract. No GUI/window capture or physical mouse/keyboard use. Any fixture additions must directly resolve observation, deadline, process cleanup or comparison equivalence; optional infrastructure is excluded.

    Next: after the three results, architect prepares next immutable product-plan candidate using the original four participants and planning-round cold-start gate; no votes transfer. Source findings on the Unix assertion and supported bridge deployment remain necessary. No automatic implementation follows planning consensus in this task.

  5. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    I3029 — accepted evidence from the three authorized probes

    User approval: "dale, haganlas", recorded in probe-authorization-v1.md. The independent tester ran A/B/C exactly once on Windows10.0.26300.9711 with system ConPTY (no adjacent conpty.dll/OpenConsole). No further test is authorized by this result. No AgentsCommander product code/config/dependency/lock/branch change or application run occurred.

    Case Observed query/reply Actual marker outside OSC and child exit Outcome
    A, portable-pty0.8.1, no PTY write No query, no reply READY23ms; exit0 at24ms PASS
    B, portable-pty0.9.0, no PTY write ESC[6n at15ms; no reply No READY or child exit during10003ms observation FAIL: startup waits without reply
    C, portable-pty0.9.0, allowed reply Query and ESC[1;1R write complete at15ms READY36ms; exit0 at21ms PASS

    openpty and spawn returned in all three cases. B raw output exactly4bytes ESC[6n; C restores output/exit after the permitted response, so B is not an unexplained fixture failure. Timing is per worker gate, not total shell duration or a performance comparison. Reader starts before spawn in the fixture, unlike AC ordering; no integrated AC/hidden-session/resize/Unix/bridge behavior is certified. No output is counted from OSC title text.

    All wrappers completed without timeout/drain error. Each owned job reports successful termination/query with active0. Independent post-run metadata checks found all9 recorded supervisor/worker/child PIDs absent. No process sweep/taskkill fallback. OS-owned ConPTY processes outside the job are not covered by jobzero proof; retain that limit.

    Evidence root D:/0_repos/AgentsCommander_iac/.ac/room-18-ac-dev-team-v5/room-shared/i3029-pty-probe/v3/.
    TEST-REPORT-v1.md SHA256 5813D08FE44C47AE046D48558D3C47890EE542FADE64A88955AAA0E2F19C88E9. Lead independently rehashed report and B/raw.bin (D907695B104F1C48F93AC2A6F8F6826688A7B359B4B101B26AF46022778DBF72), read B/C events and verified app repo clean at a1a694b after the probes. Report contains raw/events/cleanup digests and exact commands. Source set SHA256SUMS6865A0545E8DD4B5E1F48D70271DD88DA27C820AF8C4616AA13F80DD7BE478A4; source independently approved in room-shared/i3029-probe-source-review-v3.md. Locked build provenance in v3/BUILD-RECEIPT.md, exes independently rehashed by lead/tester.

    Next authorized work remains investigation plus product upgrade plan. Author must resolve the demonstrated cursor-response requirement against actual AC startup/visibility and supported bridge deployment, preserve bytes/ownership/cleanup, include the known Unix assertion adaptation, and write exact future regression proof. Coordinator supplies evidence, not a preferred technical solution. Do not automatically extend this three-case input permission into new integrated tests. All four original implementation-plan participants must review the next immutable version/digest; no vote transfer from v2 or fixture approval.

  6. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Ronda 2 de planificación: sin consenso para plan v5, SHA256 927B0920CAEC26119B8BCFE8D7A94754930840685E1C8D910D18B2F88CD1533C, base 9f410ff2cbe37d1847f3a0fc93cbc1015af3f212.

    Autor APPROVE/READY; Rust PLAN_APPROVED; Rust Grinch y Architecture Grinch CHANGES_REQUIRED. Independientes1/3.

    Progreso de consenso desde la ronda anterior: SÍ. Antes autor NEEDS_ANOTHER_ROUND y0/3; ahora la respuesta autónoma de cursor está resuelta a nivel de diseño, al igual que plataformas/Unix. Queda reforzar el observable integrado (consulta consumida/respuesta escrita en host de referencia).

    Otros bloqueos: evitar ClosePseudoConsole en el único lector durante fallo de respuesta; corregir/justificar nuevos locks; resolver desacuerdo sobre necesidad del cleanup propio frente al lifecycle existente. No se ordena retirar una posible ampliación opcional sin aplicar la regla de consulta del usuario. Se requiere nueva versión y mismos cuatro votos; ninguno se transfiere.

    Registro completo local: .ac/plans/3029-portable-pty-upgrade/round2-consensus.md. Sin implementación, nuevos builds/tests/runtime ni rama. Issue permanece abierto; se continúa la planificación.

  7. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Decisión de alcance del usuario: “ok, mantene el stop”. Ante fallo al escribir la respuesta inicial de cursor se conserva Stop explícito; no se añadirá terminación automática de la sesión en este plan. El proceso podría seguir vivo hasta Stop. Se mantiene la respuesta automática normal de cursor necesaria para0.9.0.

    Consulta resuelta: autoría de la siguiente versión continúa en la misma ronda3, con correcciones de prueba integrada y manejo de fallo según propuesta del arquitecto. Requiere los mismos cuatro votos sobre el nuevo digest, sin transferir aprobaciones de v5. Registro: .ac/plans/3029-portable-pty-upgrade/scope-decision-keep-stop-v1.md.

    Sólo planificación; esta decisión no autoriza implementar ni ejecutar nuevos probes/builds/runtime.

  8. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Ronda3 sin consenso para plan v6, SHA256 B8217489DD73558843754E6B4F2383354BB1686F1A6C125F9AA815792130B374. Autor, Rust y ArchitectureGrinch aprueban; RustGrinch pide cambios (total3/4; independientes2/3).

    Progreso de consenso desde la ronda anterior: SÍ. N2 observable integrado, N3 locks y B3 recuperación opcional cerrados. Se mantiene decisión explícita del usuario de conservar Stop, sin aborto automático.

    Único bloqueo N1b: terminar el lector al fallar CPR puede dejar Stop cerrando ConPTY sin drainer, con riesgo de bloqueo en Windows. Reviewer propone mantener readloop normal tras desarmar respuesta fallida y ajustar oracle. Autor debe verificar/resolver en nueva versión; no se transfiere voto. Registro completo .ac/plans/3029-portable-pty-upgrade/round3-consensus.md.

    Sólo planificación; no implementación ni nuevos builds/tests/runtime/probes.

  9. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Planificación completada con consenso 4/4 para plan v7.

    Plan canónico local: .ac/plans/3029-portable-pty-upgrade/plan-v7-portable-pty-upgrade.md
    Plan-SHA256: 1D4DFD90480871BA2DBF0D01A654E72D3CEC8E3A9C1843E4E1BB472621C968E4
    Base de diseño: 9f410ff2cbe37d1847f3a0fc93cbc1015af3f212.

    Autor READY_FOR_IMPLEMENTATION; Rust, Rust Grinch y Architecture Grinch PLAN_APPROVED sobre el mismo digest. Registro de votos: .ac/plans/3029-portable-pty-upgrade/round4-consensus.md. Progreso de consenso desde la ronda anterior: SÍ; antes3/4, ahora4/4, N1b cerrado.

    Una fase, seis archivos: ambos Cargo.toml, Cargo.lock, local_backend.rs, output.rs y cfg de test en git_watcher.rs. Actualización dirigida a0.9.0; respuesta autónoma de cursor Windows y parser existente; adaptaciones/regresiones Unix; bridge soportado Docker/Linux. Se preserva decisión del usuario: Stop, sin cierre automático añadido. Tras fallo CPR, lector sigue drenando para conservar Stop, sin nuevos hilos/teardown/locks de registros.

    Los tres probes ya autorizados sustentan la necesidad del handshake; no acreditan integración AC. Pruebas integradas Windows, Unix, Docker e2e, PRE/POST y CI siguen futuras/pedientes. Repo limpio en main a la base indicada, sin cambios de producto ni nuevos builds/tests/runtime.

    Se completó investigación y plan; no se implementó el upgrade. Issue permanece OPEN/PENDING para eventual implementación. La autorización actual no incluye ejecutarla; no PR, merge, release ni version bump.

  10. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Implementation is now explicitly authorized by the user for plan v7, including its automated PTY tests and delivery through a PR to main. This supersedes the previous planning-only authorization while preserving the frozen plan bytes and scope.

    Plan: .ac/plans/3029-portable-pty-upgrade/plan-v7-portable-pty-upgrade.md
    Plan/P01 SHA256: 1D4DFD90480871BA2DBF0D01A654E72D3CEC8E3A9C1843E4E1BB472621C968E4.
    The lead independently verified all four exact votes and report hashes against round4-consensus.md; no vote transferred. Step7.5 cold-start purge succeeded. Full workflow, score36/raw78, one phase/six paths; existing score and evidence reused.

    Preserve explicit Stop, continue reader draining after failed cursor response, and add no automatic close on that failure. Main revalidated and fast-forwarded to 9f87ec7ff5bc5ecf8cbfabd80a924dc238939485; independent review is classifying the #3028 delta and taking the clean PRE graph before implementation. Official sparse registry index still ends at0.9.0, not yanked, with the agreed package checksum. Proposed branch chore/3029-portable-pty-upgrade.

    Acceptance remains the frozen plan: targeted dependency resolution, autonomous hidden Windows startup with actual session observer, I/O/resize/attach/exit/Stop, Unix cases, real Docker bridge e2e, PRE/POST SCC/arcs, independent code review, all applicable CI on the exact PR head, then PR merge and cleanup. No result is claimed before execution. No release/version bump/install or packaged artifact requested.

  11. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Local implementation gates passed on 08aac4811c27c7b3c5f5a8782738e691cb309103 (base 9f87ec7ff5bc5ecf8cbfabd80a924dc238939485), branch chore/3029-portable-pty-upgrade. Code is not on main yet; PR/full CI are the next gates.

    Both manifest pins are =0.9.0, with a directed lock update. The Windows reader handles one cursor query without attach, uses the existing parser's cursor, and preserves reader draining and explicit Stop after a failed response. No automatic close was added. Both independent static reviews and PRE/POST SCC/module-pair comparisons passed on that exact head.

    Rust1.98.1 compile/check and test no-run passed. The verified test executables were then run directly with equivalent package cwd/environment and libtest arguments, after a Cargo listing unexpectedly attempted to rebuild and was interrupted before running tests. That interrupted command is not reported as a cargo-test pass. Actual Windows10.0.26300.9711 results: I3029 six passed, observer consumed/written1/1 in hidden startup, input/exit and Stop; PoisonedChild1 passed; local_backend71 passed and1 pre-existing ignored; bridge-lib5 passed; layering guards1+5+3 passed; fmt passed. No new test was ignored, and the existing ignored test is not counted as passing.

    Cross-platform verification: PENDING_LINUX_TESTS. Developed on Windows. No native Unix executor or accessible Docker CLI is established here; CI full does not execute the new I3029 Unix cases or real bridge Docker e2e. These tests remain mandatory and are not waived.

    The standing Windows/Linux handoff policy permits reviewed changes to land through a green protected PR while unavailable other-OS tests remain explicitly pending. It supersedes only the frozen plan's other-OS-before-landing ordering; plan v7 bytes and all other gates remain unchanged. Keep this issue OPEN and retain developed-windows/requires-test-linux; the PR must not use an automatic closing reference. Do not claim full completion before the missing results are reconciled.

    After PR merge, this issue will receive the exact landed main SHA, PR link and executable Linux/Docker commands with expected counts, marker/exit/cleanup evidence. The user will route a Linux group to run them. No cross-room contact, VM/service installation, workflow change, release, version bump or packaged artifact is included.

  12. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    I3029 — remaining-delta rescore after approved scope exception

    Original issue score36/raw78 remains historical for portable-pty upgrade/CPR design. Remaining delta is one existing test-inventory row: total4→5, TestOnly2→3, explanatory comment. User approved exact seventh-file exception2026-10-16. No product flow/fixture change.

    Category Score Anchor and evidence
    Scope footprint 1 One file, handful of lines; minimum anchor.
    Diagnosis difficulty 1 Exact assertion and new constructor identified, reproduced on unchangedHEAD; stated cause anchor.
    Domain knowledge required 2 Ordinary Rust literal maintenance, small added knowledge of existing TestOnly precedence.
    Solution-space ambiguity 1 Exact two literals/comment approved and independently reviewed; decided minimum.
    Blast radius and reversibility 1 Local test metadata, obvious mismatch failure, simple scoped reversal.
    Dependency and integration load 1 Self-contained, no dependency change in remaining delta.
    Verification difficulty 1 Existing exact integration guard covers it; one test.
    State, data and compatibility 1 Stateless, no schema or persistence.
    Concurrency and timing 1 Sequential static inventory literals; no timing behavior changed.
    Environment and tooling 3 Existing source-scanning CI guard/classification semantics must be understood; source scan is OS-independent and locally reproducible.

    Raw13. Final round((13-10)/190*99)+1=3. Excluded ceremony: new immutable plan, consensus/review rounds, issue/branch/PR, delegation, CI waiting, push/merge/cleanup. Existing gate semantics were scored as technical tooling, not ceremony.

    Path: keep original Full one-phase complete plan and original four-party digest consensus for this continuation. The complete upgrade retains its PTY design/concurrency criteria; the remaining3 does not erase those contracts or the explicit same-participants requirement. Do not create a new issue/branch/phase or rescore completed implementation as new work.

  13. added a commit that references this issue on Oct 16, 2026
  14. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Cross-platform verification: PENDING_LINUX_TESTS

    Developed on: Windows. Test on: native Linux with Docker.

    Landed origin/main SHA: 1950bd21640e41ab596f8601f5e66265ddfa1ee3.
    PR: #3035 (merged).
    Reviewed/CI head: b50dee8bf359153e5c069ee755acb8a23dc02d7b; landed main tree is byte-identical to that head. PR CI completed successfully: 7 workflows, 26 checks, all 14 required contexts green. Local checkout is clean on main=origin/main; feature branch was removed locally/remotely.

    Both consumers now pin portable-pty =0.9.0. Windows handles its first cursor query in the existing reader. Cursor-response failure disarms the responder while the reader continues draining; explicit Stop retains teardown ownership. No automatic close on reply failure.

    Already verified:

    • Windows acceptance6/0/0; inventory1/0/0; backend71/0/1 (one preexisting ignored test); structural guards1+5+3; configuration compatibility21+1+27. Host10.0.26300.9711 consumed/written1/1 in all6 integrated observations; cleanup/handles/map assertions passed and six captured PIDs disappeared. Build/runtime receipts explicitly refer to 8a95882a; Grinch approved reuse because the only subsequent source-tree delta was the inherited main-only coverage workflow argument. No old execution is attributed to a new commit.
    • New-head independent merge review/Node22 POST passed on b50dee8b: 1211 module pairs byte-identical PRE/POST/committed/working, complete SCC1x89 unchanged, arc/cycle checks passed, no baseline regeneration. Own code/architecture/runtime reviews passed.
    • Linux PATH gate is DONE: actual run 38916004321/job117023563614 selected6 issue_2683 tests, all passed/0failed/0ignored, including both spawn_sync_search_path_tests cases (positive injected PATH and negative missing probe directory). Checkout merged8a into its already-contained main parent, so its tree equals8a. Rust inputs remain identical to landed main. Independent Grinch audited this evidence; no PATH rerun is needed solely for this handoff.
    • Bridge lib5 remains explicitly historical evidence from 08aac481, with unchanged inputs; it is not a real Docker/PTy execution. Unix inventory is not selected by current Linux/macOS jobs and is not claimed PASS.

    Missing tests and setup

    Use the landed SHA above. If main has advanced, report the actual tested SHA, both identities and relevant intervening changes rather than assuming equivalence. Use a clean authorized checkout; do not overwrite unrelated work. Build through the target group's build owner/workflow. Rust1.98.1 and Linux native development dependencies follow .github/workflows/pr-regression-gates.yml; use repo-local Cargo output directories and retain stdin-closed/deadline handling. Docker CLI/daemon must be operational and authorized for this disposable image/container test; no installation into the user's live app is requested.

    From the repository root, set repo-local build paths before Cargo, then use package cwd:

    export CARGO_TARGET_DIR="$PWD/target"
    export CARGO_BUILD_BUILD_DIR="$PWD/target/build-dir"
    cd src-tauri
    cargo +1.98.1 test --locked -p agentscommander --lib issue_3029 -- --list
    cargo +1.98.1 test --locked -p agentscommander --lib issue_3029 -- --test-threads=1 --nocapture

    Expected: exactly3 behavior tests PASS,0failed,0ignored:

    1. pty::output::tests::issue_3029_cursor_position_respects_reader_token: real parser cursor/token isolation.
    2. pty::local_backend::spawn_sync_search_path_tests::issue_3029_unix_launch_contracts: explicit cwd-relative executable/PATH resolution, SHELL sentinel, invalid executable/directory semantic failures and owned child/session cleanup.
    3. pty::local_backend::spawn_sync_search_path_tests::issue_3029_unix_child_inherits_shell_and_unblocked_signals: actual child fixture invocation, inherited sentinel and SIGUSR1_BLOCKED=0, parent thread mask restored and cleanup.

    The third test invokes pty_3029_child_fixture itself with its dedicated environment and exact child selector. Running the helper normally returns early and is not acceptance evidence. Verify the fixture actually ran and the signal/SHELL marker assertion passed. A zero-selected filter, compile-only run or skipped/ignored case is not PASS. Preserve selected names, stdout/stderr, exit/duration and cleanup evidence. Apply plan limits (build40min, suite10min, individual PTY observations5s) with the target group's existing bounded runner; no new harness is requested.

    Then, from the same src-tauri cwd:

    AGENTSCOMMANDER_RUN_DOCKER_E2E=1 cargo +1.98.1 test --locked -p session-bridge --test docker_bridge_e2e docker_bridge_connects_streams_pty_output_and_exits -- --exact --nocapture

    Expected: exactly1 actual Docker e2e PASS,0failed,0ignored, with image built from crates/session-bridge/Dockerfile (agentscommander/session-bridge:e2e-test), real WebSocket hello, PTY marker bridge-e2e, exit frame/code0 and successful helper delivery assertions. Capture Docker image identity/build log and test stdout/stderr/exit; prove owned containers/processes were cleaned up. The test uses disposable --rm containers; audit owned cleanup, especially after failure. Missing flag prints an early-return skip while libtest may say passed: that is NOT acceptance. Docker unavailable or a deadline failure is BLOCKED/FAIL, never PASS.

    Report in this issue: actual source SHA, OS/kernel/Rust/Docker versions, build/artifact provenance, each requested test PASS/FAIL/BLOCKED, actual selected counts/skips, marker/exit/cleanup evidence and logs/artifact links. Retain the primary failure separately from cleanup errors. Do not mutate unrelated state or install a release.

    The main-only coverage pipeline is also newly running on landed 1950bd21: Frontend coverage38933834827, now using --maxWorkers=1. It is post-merge verification, not a previously passed PR check; the origin coordinator will reconcile its native completion notice without polling.

    The standing cross-OS policy permits this reviewed/green-PR publication with unavailable native Linux tests openly deferred, not waived. Keep #3029 OPEN with developed-windows and requires-test-linux until the origin coordinator reconciles sufficient passing results. No automatic closing reference was used. The user chooses/routes the Linux group; no new cross-room authority is created.

  15. mblua commented on Oct 16, 2026

    @mblua
    OwnerAuthor

    Closing at the user's explicit request: “cerralo y si algo luego falla, lo reabrimos”. This overrides the earlier instruction to keep the issue open pending target-OS verification.

    Implementation landed through PR #3035 at 1950bd21640e41ab596f8601f5e66265ddfa1ee3; the PR's tested head had all 26 checks, including all 14 required contexts, green. Stop and reader draining remain preserved. The checkout was left clean on main; the team was closed. No additional packaged build or installation was requested.

    The Linux handoff remains the record of unexecuted verification: three Unix issue3029 behavior tests with the actual child fixture, plus the real Docker bridge e2e. Closure does not turn these into passing results. The main-only coverage pipeline's final result has not yet been reconciled here. Existing pending-test labels and evidence are retained accurately.

    If a subsequent failure is reported or verified, reopen this issue and reconcile it against the landed SHA and the existing evidence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    developed-windowsDeveloped on Windows.enhancementNew feature or requestlinuxAffected platform: the behaviour occurs on or is specific to LinuxmacosAffected platform: the behaviour occurs on or is specific to macOSrequires-test-linuxLinux testing is pending; report results in this issue.windowsAffected platform: the behaviour occurs on or is specific to Windows

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions