yoi/.yoi/tickets/00001KVSEBF56/thread.md

9.3 KiB

作成

LocalTicketBackend によって作成されました。


Intake summary

Marked ready by yoi ticket state.


State changed

Marked ready by yoi ticket state.


State changed

Ticket を workspace-panel が queued にしました。


Decision

Routing decision: implementation_ready

Reason:

  • Ticket body has concrete requirements for protocol DTO feature-splitting, generated TypeScript types, generated-output drift check, and Workspace web integration stance。
  • No blocking relations / orchestration plan records exist。
  • Current queued Ticket is this Ticket only。
  • Orchestrator worktree is clean on orchestration at 615c0250; target worktree / branch is not present。
  • Existing code map confirms crates/protocol currently has tokio dependency and stream.rs enabled unconditionally, while frontend has local hand-written types for Workspace entities but no generated protocol types yet。

IntentPacket:

Intent:

  • Make crates/protocol the Rust authority for Pod wire DTOs and generate Workspace web TypeScript types from those DTOs instead of hand-writing protocol mirror types。

Binding decisions / invariants:

  • DTO authority remains Rust crates/protocol; do not create a separate web-only protocol authority。
  • Browser must not connect directly to Pod Unix sockets。
  • Backend proxy may be design-recorded or minimally scaffolded, but must preserve Worker identity resolution and method allow/block boundary; do not implement broad Worker operation UI in this Ticket。
  • stream.rs / JSONL tokio transport should be optional behind a default stream feature; DTO-only crate should compile without tokio for wasm/no-default-features。
  • Generated TypeScript must reflect serde wire shape for tagged enums / rename conventions as closely as practical。
  • Generated artifacts should be committed only if they are intended import artifacts and have a drift check。
  • Avoid broad protocol redesign or permission-model invention。

Requirements / acceptance criteria:

  • cargo check -p protocol --target wasm32-unknown-unknown --no-default-features passes, or if target installation is unavailable in environment, the code is structured correctly and validation limitation is documented。
  • Protocol root types at least include Method, Event, Segment, and related DTOs needed by Worker operation UI / stream display。
  • Workspace web can import generated protocol TypeScript types from a generated directory/file。
  • Generated-output drift check exists, e.g. cargo test/generator check that fails if committed generated TS is stale。
  • cargo test -p protocol passes。
  • Deno check/build passes。
  • git diff --check and nix build .#yoi --no-link pass if dependencies/package hash changed。
  • Backend proxy stance is represented in implementation or design notes without direct browser-to-Pod socket exposure。

Implementation latitude:

  • Use ts-rs if it fits; otherwise choose a small generator that preserves serde-tagged shape and is reviewable。
  • Put generated types under web/workspace/src/lib/generated/protocol.ts or similarly clear generated path。
  • Generator can be a test in protocol, a small binary/example, or another deterministic Cargo path; keep it simple and reproducible。
  • If adding ts-rs feature annotations is invasive, cover a useful initial subset and document unsupported types clearly, but keep Method, Event, and Segment included。
  • For uuid::Uuid, PathBuf, serde_json::Value, choose clear TS representations (string, unknown/JSON value, etc.) and document/test them。

Escalate if:

  • ts-rs cannot represent current serde-tagged enums without unacceptable manual mirrors。
  • Making protocol DTOs wasm/no-default-features compatible requires broad type redesign beyond optional stream feature。
  • Generated file would include secret/project-local content or nondeterministic ordering。
  • Backend proxy implementation scope expands into full Worker operation UI/session WebSocket implementation。

Validation plan:

  • cargo fmt --check
  • cargo test -p protocol
  • cargo check -p protocol --target wasm32-unknown-unknown --no-default-features
  • Type generation drift check command/test。
  • cd web/workspace && deno task check && deno task build
  • git diff --check
  • cargo run -p yoi -- ticket doctor
  • nix build .#yoi --no-link if Cargo.lock/package.nix/source behavior changes。

State changed

Human authorized queue routing from Workspace Dashboard. Ticket has concrete acceptance criteria and no recorded blockers, so Orchestrator accepts implementation.


Implementation report

Implementation start report:

  • Created child implementation worktree:
    • /home/hare/Projects/yoi/.worktree/00001KVSEBF56-protocol-typescript-types
  • Created branch:
    • impl/00001KVSEBF56-protocol-typescript-types
  • Base commit:
    • 746c51c7 ticket: accept protocol ts generation
  • Confirmed tracked Ticket project records are visible in the child worktree。
  • Confirmed .yoi/memory has no tracked/untracked entries in the child worktree check。
  • Spawned sibling Coder Pod:
    • yoi-coder-00001KVSEBF56
  • Coder scope:
    • read: /home/hare/Projects/yoi
    • write: /home/hare/Projects/yoi/.worktree/00001KVSEBF56-protocol-typescript-types

Next action:

  • Wait for Coder implementation report, then spawn Reviewer read-only for the implementation diff。

Implementation report

Coder implementation report received from yoi-coder-00001KVSEBF56.

Implementation commit:

  • a13fb693 protocol: generate workspace TypeScript types

Changed areas:

  • crates/protocol
    • Made stream optional behind default feature stream
    • Added optional typescript feature using ts-rs
    • Added cfg_attr(feature = "typescript", derive(ts_rs::TS)) to protocol DTOs。
    • Added deterministic generator module and example:
      • crates/protocol/src/typescript.rs
      • crates/protocol/examples/generate_typescript.rs
    • Added drift check:
      • cargo test -p protocol --features typescript generated_protocol_types_are_current
  • web/workspace
    • Added generated TypeScript artifact:
      • web/workspace/src/lib/generated/protocol.ts
    • Re-exported generated root protocol types from workspace sidebar types:
      • PodProtocolMethod
      • PodProtocolEvent
      • PodProtocolSegment
  • crates/workspace-server
    • Updated extension-point notes to explicitly preserve no direct browser-to-Pod socket exposure and require future Workspace-server proxy enforcement of Worker identity / method allow-block boundaries。
  • Packaging/dependencies:
    • Updated Cargo.lock
    • Updated package.nix cargoHash

Coder validation reported:

  • cargo fmt --check: passed
  • cargo test -p protocol: passed
  • cargo test -p protocol --features typescript generated_protocol_types_are_current: passed
  • cargo test -p protocol --features typescript: passed
  • cargo check -p protocol --target wasm32-unknown-unknown --no-default-features: passed
  • cd web/workspace && deno task check && deno task build: passed
  • cargo run -p yoi -- ticket doctor: passed
  • git diff --check: passed
  • nix build .#yoi --no-link: passed

Generated artifact cleanup:

  • Only intended generated TypeScript import artifact is tracked。
  • Orchestrator removed ignored web/workspace/node_modules/ before Reviewer routing; no ignored frontend artifacts remain under web/workspace

Orchestrator evidence checked:

  • Worktree clean on impl/00001KVSEBF56-protocol-typescript-types at a13fb693
  • Diff 746c51c7..HEAD touches expected protocol/frontend/workspace-server/package files only。
  • git diff --check 746c51c7..HEAD: passed。

Next action:

  • Route to read-only Reviewer Pod for acceptance review。

Comment

Review routing:

Spawned read-only Reviewer Pod:

  • yoi-reviewer-00001KVSEBF56-r1

Review target:

  • Worktree: /home/hare/Projects/yoi/.worktree/00001KVSEBF56-protocol-typescript-types
  • Branch: impl/00001KVSEBF56-protocol-typescript-types
  • Baseline: 746c51c7
  • Implementation commit: a13fb693 protocol: generate workspace TypeScript types
  • Diff: 746c51c7..a13fb693

Reviewer scope:

  • read-only /home/hare/Projects/yoi

Reviewer focus:

  • Generated TS shape vs serde wire shape。
  • Method / Event / Segment coverage。
  • Deterministic drift check。
  • stream feature gating and wasm/no-default protocol compile。
  • No direct browser-to-Pod socket implication。
  • Package/Nix updates。

Orchestrator will wait for reviewer verdict before integration。