2444 Commits
Author SHA1 Message Date
Hare b284934e34 test: add captured Codex worker restore fixture 2026-10-24 12:57:28 +09:00
Hare 2d33321fab fix: validate live fixture snapshots and shutdown boundaries 2026-10-24 12:57:28 +09:00
Hare 0975471986 fix: preserve diagnostic context in backend test assertions 2026-10-24 12:51:28 +09:00
Hare 214d6e21dd fix: assert classified workdir session closure in tests 2026-10-24 12:40:37 +09:00
Hare fca5c23345 fix: reject unrestorable and opaque fixture records 2026-10-24 12:39:22 +09:00
Hare f9b1500ba2 fix: align panel tests with current ticket case states 2026-10-24 12:33:31 +09:00
Hare 931bf3b27d test: add isolated saved worker restore scenarios 2026-10-24 12:33:31 +09:00
Hare 6bb671be21 test: add typed stopped worker fixture transport 2026-10-24 12:19:43 +09:00
Hare b8f2fa479c test: add isolated backend fixture seeding 2026-10-24 12:15:10 +09:00
Hare 1639be9841 fix: allow reviewers to read related tickets 2026-10-23 03:22:45 +09:00
Hare aa0fb2f787 fix: continue workdir output reads after long-poll expiry 2026-10-21 04:48:43 +09:00
Hare 1b6d4dbfd8 fix: preserve workdir failure diagnostics across transport 2026-10-21 01:22:04 +09:00
Hare 4ef7b03651 fix: stop background session checks and loading flicker 2026-10-20 22:35:38 +09:00
Hare af615ab177 fix: retain archive and worker restore failure diagnostics 2026-10-20 22:00:58 +09:00
Hare 338e39bcdb fix: defer restored workdir access until use 2026-10-20 22:00:58 +09:00
Hare 3cfe04be3a fix: preserve saved feature configuration during worker restore 2026-10-20 22:00:39 +09:00
Hare 70d153b365 fix: isolate unreadable archives from runtime startup 2026-10-20 17:39:38 +09:00
Hare ce93849948 chore: merge develop into hare/develop 2026-10-20 15:39:09 +09:00
Hare 3c499719fe feat: default Coder ticket work to review flow 2026-10-20 15:38:50 +09:00
Hare 9e1d3df7ad fix: remove overbroad Worker bypass instructions 2026-10-20 15:38:50 +09:00
Hare 18bac16a23 fix: require replay-safe control lifecycle for Subject delegation 2026-10-20 08:12:26 +09:00
Hare 9005856f77 fix: replay accepted delegation without reserving active Workdirs 2026-10-20 07:24:51 +09:00
Hare e39372a52a Merge remote-tracking branch 'origin/develop' into ticket/t-768-subject-grants 2026-10-20 06:38:12 +09:00
Hare 223a74a9e2 fix: retain byte command transport and explicit authorization fixtures 2026-10-20 06:38:12 +09:00
Hare f38d9a16ea Merge remote-tracking branch 'origin/develop' into ticket/t-768-subject-grants
# Conflicts:
#	crates/worker-runtime/src/worker_backend.rs
#	openapi/server-api.json
#	web/workspace/src/lib/generated/companion-api.ts
#	web/workspace/src/lib/generated/repository-api.ts
#	web/workspace/src/lib/generated/runtime-api.ts
#	web/workspace/src/lib/generated/ticket-api.ts
#	web/workspace/src/lib/generated/worker-launch-api.ts
2026-10-20 06:24:11 +09:00
Hare b135fa5e99 feat: enforce explicit Subject permissions and delegated Worker grants 2026-10-20 06:22:58 +09:00
Hare 07b8b6d41b Merge commit 'b8e548b92d3c785c482dbb418517cc5a2cf9e7e0' into refactor/T-765-session-feature-boundary 2026-10-20 05:34:22 +09:00
Hare 8017c55d82 fix: retain annotated compaction history and honor non-System input policy 2026-10-20 05:34:22 +09:00
Hare b8e548b92d chore: integrate reviewed browser session navigation 2026-10-20 05:31:32 +09:00
Hare 90e38551cf Merge commit '00ad02d04728a8e32a82a4e72747fefcf8a82d4e' into refactor/T-765-session-feature-boundary
# Conflicts:
#	crates/worker/src/feature/builtin.rs
2026-10-20 05:25:16 +09:00
Hare 3e8164e757 fix: fence hosting setup verification against superseded sessions 2026-10-20 04:53:43 +09:00
Hare 3b3381900f fix: preserve role-neutral input policy across compaction and replay 2026-10-20 04:45:50 +09:00
Hare 00ad02d047 chore: integrate bounded shared text page refusal 2026-10-20 03:55:13 +09:00
Hare a774925dec fix: reject byte-truncated line windows before advancing search 2026-10-20 03:53:03 +09:00
Hare 8f759911ab fix: emit Session use policy type in browser bindings 2026-10-20 03:52:55 +09:00
Hare daf1f6ed50 fix: route retained Session migration through Runtime staging 2026-10-20 03:52:55 +09:00
Hare 86602240fa refactor: bind Subject metadata and prompt confirmation to Host lifecycle 2026-10-20 03:52:55 +09:00
Hare bfeee487fd feat(auth): separate anonymous entry from expired session recovery 2026-10-20 03:52:48 +09:00
Hare f9830fe7dd test: reject Bash search pages that would skip an unread long line 2026-10-20 03:40:36 +09:00
Hare de96c5b577 chore: update shared file contracts and validation fixtures
# Conflicts:
#	crates/worker/src/checkout_http_tests.rs
2026-10-20 03:26:56 +09:00
Hare 6e729ed06c refactor: isolate Feature System input migration and compaction policy 2026-10-20 03:21:22 +09:00
Hare f38b2a52b1 fix: record native prior Read only after result validation 2026-10-20 03:21:14 +09:00
Hare dd5384df3b feat: expose retained Bash streams through common WIP file contracts 2026-10-20 03:13:46 +09:00
Hare 6576850b7a chore: connect shared file contracts for Bash validation 2026-10-20 03:03:53 +09:00
Hare 4555aace28 feat: capture bounded Bash output over replayable byte transport 2026-10-20 03:01:22 +09:00
Hare 47b32ef6ab fix: bind capability changes to Object freshness and update contract consumers 2026-10-20 02:53:21 +09:00
Hare bb5c50f9ab feat: persist System input policies through public consumers 2026-10-20 02:44:28 +09:00
Hare 32a409c15d feat: share virtual file contracts and checked binary byte ranges 2026-10-20 02:18:49 +09:00
Hare 19514a5d6a feat: define bounded Feature-owned system input envelopes 2026-10-20 02:14:52 +09:00
Hare 887184796e docs: distinguish commit completion from Feature authority 2026-10-20 02:05:02 +09:00
Hare cd0eb5eb00 fix: allowlist public system input projections 2026-10-20 02:02:28 +09:00
Hare e8dfb3e68d refactor: notify system input producers after durable commit 2026-10-20 02:02:28 +09:00
Hare 434ce34da7 refactor: bind checkout target lifetimes to Object observations 2026-10-20 02:01:22 +09:00
Hare bfb51b7ca9 fix: bound encoded common text results including escape and record overhead 2026-10-20 01:48:23 +09:00
Hare 38d9069632 feat: publish stable root file contracts and target-owned dispatch 2026-10-20 01:46:30 +09:00
Hare e5749b9be0 test: integrate Drive connection and lifetime coverage 2026-10-20 00:37:32 +09:00
Hare 387b5ff7df docs: record Drive connection coverage and fault evidence 2026-10-20 00:35:11 +09:00
Hare ec6c5beda0 test: connect Drive publication to client and resource lifetimes 2026-10-20 00:34:50 +09:00
Hare 8e40fae6f4 fix: recover unpublished Subject creation and preserve auth rejections 2026-10-19 18:56:24 +09:00
Hare c961f244ab fix: preserve feature metadata for concise Journal startup context 2026-10-19 18:45:32 +09:00
Hare cea0225a6e fix: migrate legacy session history and retained archives 2026-10-19 13:52:43 +09:00
Hare b3189d8e85 fix: preserve worker retention failure diagnostics 2026-10-19 13:52:43 +09:00
Hare 24bc45a31e chore: merge develop into hare/develop 2026-10-19 01:31:23 +09:00
Hare b02360fd75 fix: restore orchestrator target push requirement 2026-10-19 01:31:01 +09:00
Hare 41c9d2d5c7 docs: record restored parent regression evidence and cost 2026-10-19 00:02:02 +09:00
Hare cc66bd5052 test: connect restored Runtime parent tools to child session 2026-10-19 00:02:02 +09:00
Hare d1408d3a2f fix: project runtime list subjects for Worker control tools 2026-10-19 00:02:02 +09:00
Hare 19122fb5ea fix: use public Worker control entry in regression design 2026-10-19 00:02:02 +09:00
Hare 1fb216e6ae fix: refresh Ticket regression design evidence 2026-10-19 00:02:02 +09:00
Hare 4b14f7e6b3 docs: design prioritized regression coverage 2026-10-19 00:02:02 +09:00
Hare 67767eeee7 test: integrate Ticket public regression coverage 2026-10-18 02:35:16 +09:00
Hare 1bfb4ce119 fix: align Ticket regression design with Host retry identity 2026-10-18 02:10:15 +09:00
Hare 651820dc6d test: connect Ticket public regressions to real Backend 2026-10-18 02:10:15 +09:00
Hare 75b1557d63 feat: browse Subject Journals and persistent Memory links 2026-10-18 02:03:51 +09:00
Hare 23ff518209 fix: clarify Ticket regression fixture boundaries 2026-10-18 01:26:52 +09:00
Hare fab9e0f4b5 docs: design focused Ticket regression coverage 2026-10-18 01:26:52 +09:00
Hare 5ee42b8db8 docs: record Journal compaction validation and evaluation limits 2026-10-17 12:29:47 +09:00
Hare daf438701f docs: explain shared Journal snapshot boundary guarantees 2026-10-17 12:25:24 +09:00
Hare 23ee401287 fix: disambiguate historical Journal retention instructions 2026-10-17 12:25:24 +09:00
Hare 8f598da931 test: verify frozen Journal compaction across Hosts and restores 2026-10-17 12:25:24 +09:00
Hare 956aeed6b2 feat: freeze Host Journal context across compaction 2026-10-17 12:19:37 +09:00
Hare adfa422973 chore: merge develop into hare/develop 2026-10-17 12:06:05 +09:00
Hare 10d200d9ba chore: align Journal references with integrated develop 2026-10-17 03:52:11 +09:00
Hare 7a5228b8e6 fix: reconcile Memory Journal links with handoff fencing 2026-10-17 03:52:11 +09:00
Hare 0eabdf3a1f chore: integrate Journal-gated Subject handoff 2026-10-17 03:47:11 +09:00
Hare b1808b7c4d fix: unblock MR follow-up and simplify orchestration guidance 2026-10-17 03:35:58 +09:00
Hare 6645ea0a47 fix: observe original presence through saved legacy Journal links 2026-10-17 00:10:35 +09:00
Hare b544e53bd7 feat: connect Memory provenance to durable Journal context 2026-10-16 23:54:54 +09:00
Hare 04a4e59100 feat: fence Subject handoff on recorded Journal and seed new bodies once 2026-10-16 20:51:08 +09:00
Hare 52e914eebc feat: offer ID-free passkey login and explicit legacy migration 2026-10-16 19:01:43 +09:00
Hare 9c12fb4372 feat: verify discoverable passkeys against their saved owners 2026-10-16 19:01:43 +09:00
Hare 3c18916118 test: wait for complete isolated server address records 2026-10-16 19:01:43 +09:00
Hare be1c030350 chore: merge develop into hare/develop 2026-10-16 15:08:40 +09:00
Hare a7faf2cea6 docs: record test optimization results and runner validation 2026-10-16 15:04:52 +09:00
Hare 5cc5ece997 feat: add bounded parallel runner for the normal test suite 2026-10-16 15:04:52 +09:00
Hare ffaaf2ecb0 test: isolate local rules and reduce repeated fixture setup 2026-10-16 15:04:52 +09:00
Hare 6667985883 fix: preserve test completion and fixture invariants under concurrency 2026-10-16 15:04:42 +09:00
Hare 22dcd8a29f fix: make reverse session reads linear for large records 2026-10-16 15:04:42 +09:00
Hare a2816a053d fix: isolate Workspace notifications from public entry 2026-10-16 11:30:00 +09:00
Hare d74660d1d1 fix: retain workspace creation state across session rechecks 2026-10-16 11:08:27 +09:00
Hare 24c6f772f7 fix: serve entry shells independently of workspace catalog 2026-10-16 10:48:51 +09:00
Hare a060ffada8 feat: add public entry and authenticated workspace dashboard 2026-10-16 10:48:51 +09:00
Hare b8b12442a0 feat: separate login registration and own account flows 2026-10-16 09:43:57 +09:00
Hare d22899d39e feat: activate provisional users with scoped passkey enrollment 2026-10-16 08:48:35 +09:00
Hare af008f802d feat: explicit hosting administrators and persistent self-registration policy 2026-10-16 07:26:21 +09:00
Hare 7042ec7d50 chore: merge develop into hare/develop 2026-10-16 05:52:36 +09:00
Hare a2cec5afd1 fix: preserve console alert order and improve alert colors 2026-10-16 05:28:17 +09:00
Hare b5a307811b fix: reconcile erased Archive removals and exercise live compaction recording
Reconcile immutable Runtime removal input under a confirmed permanent erase fence. A confirmed source_removed receipt is audited without republishing erased archives; unknown receipt plus attested remaining aggregate permits an audited stale plan and proof-bound purge replacement. Unknown receipt and inventory remain unresolved. Distinguish domain tombstones from scoped Runtime physical erasure acknowledgements.

Erase diagnostic originals and interrupted staging bound to the same archived Session/removal operation, validating Workspace/Worker/fingerprint and saved receipts without rewriting their historical retained flags. Finalize Backend removal only after physical acknowledgement, including previous Retain disposition.

Connect public standalone protocol, real Worker request-threshold compaction twice within one turn, cancellation and real pre-AI input rollback, original canonical readers, existing Jobs and sequential Journal tools. Gate generation while compaction completes; verify all durable originals were served, summary/rolled-back input exclusion, exact final cursor, no extra input for successor drain, and one ongoing open entry. External model streams/usage are scripted, not semantic evaluation.

Validation: Backend1112lib+11bin (existing ignore1), Runtime429lib+38bin, standalone72lib+27integration (existing model ignore1), runtime-api10, root check/doc/fmt/diff/naming, Server/Runtime builds, isolated worker_environment2 passed. Earlier broad suites remain recorded on the prior source. Fixtures and injected boundaries are not arbitrary crash/remote-transport-loss coverage; worker_environment only verifies startup/connection/cleanup.

Acceptance clarification: T-734 assignment answer event22 explicitly defers real-model semantic condition6 to user use, excluding it from this completion scope. It remains unexecuted and unevaluated, not passed. Technical review findings still require a fresh independent verdict on this source.
2026-10-16 04:58:53 +09:00
Hare 5bd49760e5 fix: fence Journal originals before publication and reconcile removal intent
Protect attributed originals before the first public commit; distinguish pending Session material from missing committed sources. Gate removal admission by the Journal Feature and resolve Subject ownership from durable singleton authority. Resume explicit erasure through signed delete transport and proof-bound purge plans without creating a Journal Job or archive.

Validation: changed-crate suites, root check, doc/fmt/diff/naming checks, Server/Runtime builds and worker_environment isolation suite passed. Public standalone scripted dialog connects Host, automatic Job, sequential tools and drain while dialog continues. Backend public embedded WorkerRemove tests connect removal forwarding, durable Jobs, retention, Runtime and SQLite; Session/attribution/profile fixture setup bypasses creation/auth routes. Runtime signed generated-client tests separately exercise request authentication.

Limits: real-model semantic acceptance condition 6 remains unevaluated without a new explicit model/credential/budget grant. Conditions 1/7/8/11 do not have complete product E2E coverage: worker_environment only verifies isolated startup/connection/cleanup. Compaction tests connect local hooks/reader/store rather than the full public dialog-to-Journal chain. Erasure racing a previously prepared Archive removal plan fails closed with conflict; automatic stale-plan replacement is not implemented.
2026-10-16 03:59:45 +09:00
Hare 9debf43645 Merge remote-tracking branch 'origin/develop' into work/T-734-journal-recording 2026-10-16 02:19:24 +09:00
Hare 81af1f085c feat: record confirmed public Session history through durable Journal Jobs 2026-10-16 02:19:24 +09:00
Hare b67aa2de7d fix: simplify Ticket reporting and speed up browser lists
Remove model-supplied assignment and retry identities from implementation reports; retain Host idempotency, authentication and notification evidence.

Add a SQL-only browser projection and decouple auxiliary page loads. Preserve authoritative MR evidence queries. Include regression tests and component benchmarks, documenting the remaining no-match search cost.
2026-10-16 01:58:15 +09:00
Hare 9f1cbbd385 fix: inherit parent profile for default subworkers 2026-10-16 01:57:58 +09:00
Hare 8a3d9d67d2 fix: guard deferred state when leaving workspace routes 2026-10-16 01:57:58 +09:00
Hare 6218c27fb6 fix: separate account registration from authenticated passkey addition
Bind enrollment purpose and allocated/current account to verifier state. Reject existing-handle registration, derive additions from live transport authentication, recheck revocation/expiry in the insert-only transaction, and consume challenges atomically across connections. Derive stable account WebAuthn handles without rewriting legacy credentials; reject implicit-user login and unsafe legacy ceremonies.

Align account callers, DTO/OpenAPI/generated artifacts and migration/recovery rationale. Preserve credential-less legacy identities rather than allowing anonymous reclaim.

Validation: 14 actual-verifier passkey tests; full workspace-server 1086 library + 11 binary passed (Drive ignored case explicitly selected separately and passed); server-api default 99 and TypeScript feature 108 passed; isolated auth/Runtime E2E 1+2 passed; Web 645 + component 394 passed; root cargo check, docs/doctests, Server/Runtime builds, fmt, naming and generated consistency passed. Software authenticator only; hosted CI/hardware login not claimed.
2026-10-16 00:55:16 +09:00
Hare b744efd104 fix: align isolated runtime harness with current trust contract
Keep Workspace trust enrollment and owner-authenticated registration, then verify each Runtime connection with a fresh signed request and match its binding ID. Remove obsolete workspace_trust_id input and cached connection_state assertions.

Validation: cargo test -p yoi-e2e --features e2e --test worker_environment --test auth_passkeys -- --nocapture (2 Runtime harness tests and 1 Passkey product E2E passed); root cargo check.
2026-10-16 00:35:23 +09:00
Hare 18384482f6 feat: integrate durable Journal storage APIs 2026-10-15 20:51:51 +09:00
Hare 885e8045fe docs: map notification routing and verification boundaries 2026-10-15 19:41:40 +09:00
Hare 7b52bea23b feat: integrate MR notifications and implementation results 2026-10-15 19:40:29 +09:00
Hare a31f002a0a fix: retain MR source observations and notification actors 2026-10-15 19:13:03 +09:00
Hare 8ab7ee05db chore: retain committed Ticket sidebar changes during notification integration 2026-10-15 18:51:14 +09:00
Hare 62d71ed17e fix: retain preparation diagnostics and source-owned cleanup 2026-10-15 18:51:00 +09:00
Hare cafa2fa6ea fix: integrate recoverable and fair Job notification retries 2026-10-15 18:44:20 +09:00
Hare 95ed9e8719 fix: fairly schedule undecided Job notification retries 2026-10-15 18:43:23 +09:00
Hare 84ea23c2e6 feat: route MR events and authenticated implementation results 2026-10-15 18:38:27 +09:00
Hare ac49740a50 fix: simplify Ticket sidebar and surface repository targets 2026-10-15 18:35:39 +09:00
Hare bdc7c73143 fix: retry Job notification source preparation failures 2026-10-15 18:33:23 +09:00
Hare 011dbb9a98 fix: align MR evidence fixtures with canonical Ticket posts 2026-10-15 18:29:40 +09:00
Hare b9e7d5675b fix: project Job receipts and pinned notification recipients 2026-10-15 18:28:11 +09:00
Hare c155259c8e chore: integrate backend Job notifications with diagnostics 2026-10-15 18:16:29 +09:00
Hare e33729647c fix: preserve notification uncertainty and target provenance 2026-10-15 18:15:47 +09:00
Hare e71177900e feat: route backend job results through common notifications 2026-10-15 18:12:07 +09:00
Hare f50fa47a48 fix: await DB cleanup in cancelled Runtime metadata test 2026-10-15 17:55:54 +09:00
Hare b71fc9ee54 feat: expose read-only notification routing and delivery diagnostics 2026-10-15 17:55:54 +09:00
Hare e70cba4618 chore: integrate case permission fixes for notification work 2026-10-15 16:58:21 +09:00
Hare d115819f51 fix: honor Profile case permissions and expose Ticket API errors 2026-10-15 16:55:09 +09:00
Hare 822a084b31 fix: centralize durable Ticket notification routing 2026-10-15 02:20:40 +09:00
Hare c2df3041f9 fix: pin Journal source pagination to saved coverage content 2026-10-14 22:18:02 +09:00
Hare aabc502f30 feat: add durable subject Journal operations and bounded reads 2026-10-14 21:57:35 +09:00
Hare 65ead5fffd fix: keep page errors local and preserve Workspace error details 2026-10-14 21:19:42 +09:00
Hare 63d581914c fix: restrict console image loading to the Normal viewport
Hide attachments in Overview and aggregate image tool calls normally. Load previews near the console scroll viewport, guard stale observer callbacks, and offer explicit loading without IntersectionObserver. Cover visibility and request timing in component and Chromium tests.
2026-10-14 14:51:30 +09:00
Hare da378fc902 fix: complete Ticket post integration and expose targets
Preserve ordered targets in Workspace ShowTicket and native reads. Complete authenticated post-edit transport, shared dispatch, generated contracts and regression fixtures. Keep canonical content-edit delivery inputs transactional and separate from discussion posts.
2026-10-14 14:49:20 +09:00
Hare 8611078058 feat: unify Ticket posts and simplify detail layout
Checkpoint requested before the targets read-tool correction. Includes canonical initial posts, creator/edit metadata, migration and UI work, and removal of delivery diagnostics from Ticket details.\n\nIntegration remains incomplete: the Client post-edit trait implementation and server post routes/dispatch are not yet connected; cargo check currently fails. This commit does not assert validation or delivery completion.
2026-10-14 02:42:58 +09:00
Hare 26ab6130e0 fix: navigate before loading page data 2026-10-13 19:56:38 +09:00
Hare a82e70047a feat: replace Ticket kanban with query-based list 2026-10-13 19:08:51 +09:00
Hare 12d1588c05 chore: merge develop preserving documentation structure and console UX
Integrate develop at 523bade3 while retaining concise agent guidance, rustdoc-owned design rationale, and current console history/rewind behavior. Adapt incoming tests to public entry-ID rewind and synchronize OpenAPI/TypeScript artifacts.

Validation: default-member cargo test --all-features (4936 passed, 23 ignored), root cargo check, all-feature rustdoc with broken links denied, format/diff/name guards, OpenAPI and 11 TypeScript freshness checks. Web: 613 unit, 327 component, 7 Ticket browser and 3 Console browser tests; check/build passed. Merged-state Ticket visual review at 1440/768/390px in light/dark; no matching pre-merge image baseline. E2E/live-provider checks not run.
2026-10-13 02:46:50 +09:00
Hare 523bade3a6 fix: compose bounded execution with Ticket public callers 2026-10-12 18:25:42 +09:00
Hare e436b2ae58 fix(server): own remaining request callers and stop continuation 2026-10-12 17:36:08 +09:00
Hare 05ba6a43ad docs: correct T743 standalone scope and recover validation evidence 2026-10-12 15:55:29 +09:00
Hare 88811466f2 docs: streamline agent guidance and standardize rustdoc links 2026-10-12 15:54:18 +09:00
Hare 4d98119440 fix(server): bound embedded protocol and Feature shutdown ownership 2026-10-12 15:07:27 +09:00
Hare c6d73e8286 revert: remove withdrawn T748 composition from T743 source
Mainline corrective revert of 5c5727e3; preserve published history and report bodies. Implementation, public contracts and T743 semantic tests return exactly to 9b0d42fd against develop56795fb9. T748 platform, only-dependent adapter and execution fixtures are not T743 return gates. Independent T743 review and fixes continue on this same branch/MR.
2026-10-12 15:03:44 +09:00
Hare 4efb0ace1f docs: consolidate design documentation and standardize crate English 2026-10-12 14:58:00 +09:00
Hare 5873f25073 fix(server): own residual Ticket MR and worker request stages 2026-10-12 14:46:05 +09:00
Hare ebce7ab7b1 docs: record cancellation-safe Runtime trust revocation evidence 2026-10-12 12:18:31 +09:00
Hare 1a065db0fc fix(server): retain trust-key revoke publication after cancellation 2026-10-12 12:12:50 +09:00
Hare 6d8c49b72d docs: record Runtime authority and cancellation-safe publication stages 2026-10-12 11:30:03 +09:00
Hare 925bce2a40 fix: own Runtime management authority stages and commit publication workflows 2026-10-12 11:24:12 +09:00
Hare b63bdb4402 docs: record discovery and Runtime metadata boundary verification 2026-10-12 10:31:48 +09:00
Hare dbcea6c34b fix: await bounded Worker discovery and Runtime resource summary owners 2026-10-12 10:25:59 +09:00
Hare 27b6c688e4 docs: explain independent mandatory callback ownership and causal regressions 2026-10-12 09:47:06 +09:00
Hare a2487b575d fix: keep mandatory Subject callbacks independent of waiting Host parents 2026-10-12 09:41:50 +09:00
Hare b10b731531 docs: record review boundary fixes and exact-source verification 2026-10-12 09:06:36 +09:00
Hare 5c5727e3f8 merge: compose T748 bounded execution with T743 public callers 2026-10-12 09:00:39 +09:00
Hare c0223a0dea fix: await owned cold protocol signing and propagate authorization failure 2026-10-12 08:58:34 +09:00
Hare d3fcfb2977 fix: keep mixed Subjektiv Runtime waits off the sole DB worker 2026-10-12 08:58:31 +09:00
Hare 66bb9d0b82 docs: record bounded DB boundaries and parallel suite causal regressions 2026-10-12 08:14:36 +09:00
Hare 49bfbfb235 test: diagnose early command rejection instead of waiting forever for provider dispatch 2026-10-12 08:09:15 +09:00
Hare f597f1b57a fix: acquire SQLite write ownership before restore and deletion authority reads 2026-10-12 07:57:46 +09:00
Hare df9d056d42 test: observe SQL admission and publication before replacing authority or teardown 2026-10-12 07:55:07 +09:00
Hare f3d4aba54e fix: isolate finite DB and Host execution ownership in fixtures 2026-10-12 07:55:07 +09:00
Hare 9b0d42fdbc feat(ticket): expose case tags and independent assignment handling 2026-10-12 07:33:11 +09:00
Hare 61533fadb6 feat(backend): compose Assign routing with bounded async callers 2026-10-12 06:57:34 +09:00
Hare b1076f1d65 feat(backend): bound synchronous database and host execution ownership 2026-10-12 06:43:16 +09:00
Hare a633a53274 docs: delete unmaintained docs 2026-10-12 05:42:59 +09:00
Hare 3aaef94bfe docs: record documentation audit findings 2026-10-12 05:42:08 +09:00
Hare ce2ee11ce6 docs: define test suite ownership and execution rules 2026-10-12 05:42:08 +09:00
Hare 56795fb92c fix: drain concurrent assignment inputs and discard stale pending retries 2026-10-12 05:39:33 +09:00
Hare 26434bb867 feat: route Orchestrator delivery and Worker starts from Ticket Assign 2026-10-12 05:13:53 +09:00
Hare a6a97bca74 feat: integrate durable Ticket assignment tracking with current develop 2026-10-12 03:26:15 +09:00
Hare 27bf74a051 fix: integrate bounded Worker protocol transport with reviewed deadline fixes 2026-10-12 03:20:05 +09:00
Hare 96e5ceb4fb fix(ticket): replay Assign receipts before new work constraints 2026-10-12 03:20:02 +09:00
Hare cc9177728d fix: integrate MCP stdio deadlines with reviewed Agen fixes 2026-10-12 03:16:48 +09:00
Hare ae26cdfbef fix: integrate signal-aware Agen policies with Codex refresh bounds 2026-10-12 03:14:25 +09:00
Hare 45d8f4d69f docs: normalize Worker protocol contract formatting 2026-10-12 02:57:11 +09:00
Hare 21df210a7f fix: bound Worker protocol backpressure and connection ownership 2026-10-12 02:56:42 +09:00
Hare 2a55bef036 feat(ticket): persist Orchestrator assignment tracking and audit 2026-10-12 02:54:45 +09:00
Hare e19742d509 fix: preserve pause reclamation deadline during post-tool policy 2026-10-12 02:54:12 +09:00
Hare 2b1f68a3ea test: fence policy interruptions across tool ownership and restore 2026-10-12 02:38:38 +09:00
Hare 74d0af93e3 fix: interrupt pending tool policies before provider admission 2026-10-12 02:38:38 +09:00
Hare 520a898bd8 fix: bound MCP stdio requests and shutdown across stdin waits 2026-10-12 02:35:42 +09:00
Hare 9e1de93a04 fix: bound Codex OAuth refresh bodies and deadline 2026-10-12 02:30:16 +09:00
Hare 2bf68a5bc8 Merge branch 'docs/develop-async-audit-20261010' into hare/develop 2026-10-12 02:02:22 +09:00
Hare 6f86d11000 docs: report develop async and locking audit 2026-10-12 02:01:53 +09:00
Hare 98023b9872 refactor: remove Workdir cleanup content hashing 2026-10-12 01:50:30 +09:00
Hare 5ac3b1e482 feat: select rewind points directly from Console history 2026-10-11 14:50:49 +09:00
Hare 7f03db9d79 Preserve verified case judgment identity and canonical route authentication 2026-10-11 03:36:27 +09:00
Hare 4dd5207d1e merge: compose classification tags with Ticket case migration 2026-10-11 02:57:45 +09:00
Hare 04bdf1da23 fix: keep Console composer editable in every state 2026-10-11 02:33:34 +09:00
Hare a558c7656a merge: compose current auth migration with Ticket case schema 91 2026-10-11 02:21:52 +09:00
Hare b1fe562e15 fix: reconcile Ticket tags with current develop contracts and Runtime auth 2026-10-11 02:03:44 +09:00
Hare ba3ebaa68c feat: separate Ticket case state and immutable closure judgments 2026-10-11 01:41:46 +09:00
Hare 71ab4c06b9 fix: reconcile approved compaction result with develop updates 2026-10-11 01:37:13 +09:00
Hare e9397fa0dd feat: add shared Workspace Ticket classification tags 2026-10-11 01:23:30 +09:00
Hare a9a67fd6ad docs: report Workdir removal mount and timeout findings 2026-10-11 01:11:53 +09:00
Hare 536c593539 fix: normalize SSH migration timestamp comparisons 2026-10-11 01:11:53 +09:00
Hare 4099359560 fix: authenticate Runtime requests without persisted verification
Use the current Workspace signing identity for each request and remove binding key copies and verification handshake gates. Preserve explicit trust and revocation, migrate historical evidence, and align Runtime settings and connection tests. Retain request scope and durable replay protection with regression coverage.
2026-10-11 00:52:24 +09:00
Hare 298f8c1330 fix: carry full Host summary into compaction worker input 2026-10-11 00:47:36 +09:00
Hare 6a12b6cc34 fix: complete state-contract naming cleanup 2026-10-10 17:48:59 +09:00
Hare 3263d50125 Create 2026-10-10-compaction-user-directive-loss.md 2026-10-10 16:35:30 +09:00
Hare c78f7f7d80 feat: replace revision counters with domain state contracts
Use content digests, key fingerprints, binding and trust identities, immutable mutation receipts, and observation tokens instead of state-update ordinals across API, storage, Runtime, and Web contracts.

Preserve historical replay and secret material through frozen migrations; preflight uncertain removals before cutover, resume provisioning receipts, validate encrypted migration candidates, and align fresh/upgraded schemas. Include reviewed regression fixes, generated artifacts, and validation evidence.
2026-10-10 15:55:20 +09:00
Hare 72ce817de4 fix: integrate structured Workdir refusal diagnostics
Merge independently approved T-731 source 8af492ff into current develop after T-732. No conflicts or source edits. Integration root locked/offline check, eight affected crates, Workdir default/http-client, Server 742+11 (one existing ignored), API schema freshness, fmt/diff passed. Historical Workdir403 remains unidentified; HTTP-only feature-gating limitation remains separate.
2026-10-10 14:40:05 +09:00
Hare ac01f64f4d fix: integrate concurrent Workspace request admission
Merge independently approved T-732 source defaf8f3 into develop. Integration root locked/offline cargo check, full Server 737 library and 11 binary tests (one existing ignored), fmt/diff passed. No source changes or conflict resolution.
2026-10-10 14:25:37 +09:00
Hare 8af492ff84 Merge develop into T-731 source and align scoped authorization logging fixture 2026-10-10 14:20:32 +09:00
Hare defaf8f369 fix: allow concurrent Workspace requests with deletion admission fencing 2026-10-10 13:19:52 +09:00
Hare fc57716344 docs: record workdir tooling and runtime feature blockers 2026-10-10 12:04:56 +09:00
Hare dc8e586a0b fix: keep runtime responsive during workdir cleanup 2026-10-10 12:04:56 +09:00
Hare 7321d6c7c3 fix: forward scoped Workdir delegation checks
Forward provider authorization and overlap checks through ScopedWorkdirSession while preserving capability ceilings, path rebasing, write leases, and revocation. Exercise stacked wrappers, External providers, and remote HTTP sessions without weakening resolved symlink policy.
2026-10-10 02:12:29 +09:00
Hare fd759545c1 fix(workdir): preserve mutation and command safety through diagnostics 2026-10-10 00:00:43 +09:00
Hare 6ac87c885e fix(workdir): keep diagnostic context transparent to Write creation 2026-10-09 23:21:50 +09:00
Hare 10c55874e3 fix: preserve tool classification and accurate Workdir failure stages 2026-10-09 22:55:53 +09:00
Hare f9d70e2ae2 fix: retain structured Workdir refusal diagnostics across provider boundaries 2026-10-09 22:23:22 +09:00
Hare 2060e8f2c1 fix: expose compatibility input contracts and guide WIP usage 2026-10-09 19:49:06 +09:00
Hare 471113fbcf fix: inspect only the requested WIP entity 2026-10-09 19:17:05 +09:00
Hare e8828cd1b5 feat: improve Drive file browsing and actions 2026-10-09 18:39:27 +09:00
Hare 73ac13e802 fix: restore compact Workdirs table and icon actions 2026-10-09 18:21:25 +09:00
Hare e7b1aa2a6a chore: merge develop into hare/develop 2026-10-09 18:03:58 +09:00
Hare c550abb11b fix: preserve Workdir operation errors in API logs 2026-10-09 18:03:37 +09:00
Hare caac1c18e0 fix: remove legacy ticket conclusion reason limits 2026-10-09 18:03:37 +09:00
Hare 5831190012 fix: integrate safe Workdir removal recovery
Merge approved T-730 source b1dc8f9f into develop. Resolve the test-registration conflict by preserving both Drive and Workdir-removal tests. Integration root check, Runtime/Server/Worker suites, real Web Drive adapter, generated Workdir contract, Web check/unit/components/build/browser, fmt and diff checks passed.
2026-10-09 17:43:19 +09:00
Hare b1dc8f9f1c fix: guard mount-safe Workdir cleanup and current-condition recovery 2026-10-09 17:20:51 +09:00
Hare 4d266420fc fix: retain concrete Workdir observation failure causes 2026-10-09 17:02:38 +09:00
Hare b02eb7bee3 feat: integrate Workspace Web Drive management
Merge approved T-724 source e4daa4aa into current develop a91eec29 without conflicts. Root check, Server714+11 and explicit real SQLite/LocalFileSystem/Web HTTP adapter, API TypeScript91 and generated contracts, Web check0/0/unit569/component305/build/browser9/responsive1 all passed. Fixture-browser results are distinct from real storage/auth tests; no live deployment update.
2026-10-09 16:59:19 +09:00
Hare ed50847afe fix: fence removal while permitting safe Workdir reconnection 2026-10-09 16:51:59 +09:00
Hare ef642b34be fix: explain safe WorkdirDelete recovery in tool output 2026-10-09 16:41:43 +09:00
Hare e4daa4aaa7 feat(workspace): add shared Drive browsing editing and Worker grants 2026-10-09 16:40:50 +09:00
Hare c889c9a68d fix: show Workdir removal causes and refresh ordinary retries 2026-10-09 16:35:26 +09:00
Hare a91eec295f fix: align API logging tests with worker assignment names 2026-10-09 16:28:14 +09:00
Hare 4337f415f9 fix: revalidate durable Workdir removal on ordinary retry 2026-10-09 16:26:01 +09:00
Hare 34f9e70ce8 chore: merge develop into hare/develop 2026-10-09 16:25:49 +09:00
Hare e6aa56ff6f feat: integrate authorized Worker Drive operations
Merge approved T-723 source e94af40d into develop3a2994cd. Resolve overlapping configuration WIP test migration by retaining source typed result assertions and target live Tree/Inspect publication checks. Runtime implementation merged without conflicts. Root check; full Manifest, Tools, Worker935+110, Runtime349+34, Server710+11, FS and Workdir suites; Workdir HTTP; API83/TypeScript91; WIP0.2.0 resolution and fmt/diff checks passed.
2026-10-09 16:11:07 +09:00
Hare 3a2994cdd7 feat: integrate bounded checkout discovery
Merge approved T-714 source b8faa83c into develop c79506b6. Preserve the target's already-integrated public Tree/Inspect/Invoke configuration fixture migration in the overlapping test helper; runtime implementation merged without conflicts. Root check, complete FS/Workdir/Tools/Worker/Server/API suites, HTTP Workdir suite, WIP 0.2.0 resolution, formatting and diff checks passed.
2026-10-09 15:45:41 +09:00
Hare e94af40dab fix(worker): reconcile invalid Drive completions and default pages
Accept the Backend shared default page maxima (list 200/search 128), not an unsent 100 limit. Classify semantically invalid completions before receipt reconciliation; query the original identity once and accept only validated committed results, never resend or upgrade revisions.

Regressions fail on 61afdb77 and pass after the fix: real API 201-entry default Tools/native WIP pagination; mismatched completion ID/invalid entry metadata recovery and unresolved/invalid receipt matrices. Root cargo check; Worker 920 unit +110 integration; Server 709 lib +11 binary; Drive unit18/API18; fmt and diff checks passed.
2026-10-09 15:36:06 +09:00
Hare b8faa83c47 fix: preserve unknown mutation outcomes after connection loss
Address POST_COMMIT_CONNECTION_FENCE from independent review of af655ae6. Post-success publication must not claim pre-effect rejection if Write/Edit/Create may have committed before attachment loss. Keep read-only validator mismatch and lazy entry mapping unchanged.

Add deterministic real checked provider/Tools commit -> detach -> production publication -> WIP Invoke/Client tests for all three mutations, asserting committed effects, OutcomeUnknown audit and exactly one dispatch. Narrow race9, Worker903+110, root check, dependent Server config19/proxy1, SDK resolution and fmt/diff checks passed.
2026-10-09 15:30:21 +09:00
Hare c79506b60f chore(ticket): preserve integrated authentication and WIP test fixes
# Conflicts:
#	crates/workspace-server/src/server_workspace_config_wip_tests.rs
2026-10-09 03:10:39 +09:00
Hare e90e2ab391 fix(ticket): validate configuration adapters through structured WIP 2026-10-09 03:04:47 +09:00
Hare 61afdb7773 feat: expose authorized Worker Drive tools and native WIP entries
Use T-722 identity-bound API for paged discovery, bounded text read/create/write/edit, folders, relocate/delete, revision-fixed images, Workdir artifact publication, and mutation receipts. Keep IDs as Workspace-bound decimal strings, observed CAS preconditions and Client validators hidden from model arguments, and never substitute revisions or blindly replay uncertain effects.

Activate via host-bound Feature/Profile/schema and centralized instructions. Publish only the Drive entrance as indexable; resolve selected stable IDs directly with coherent self-scoped WIP publication. Internal SubWorkers and Reviewer children deny undelegated Drive access at feature and client boundaries; no child grant or local storage authority is synthesized.

T-723 validation: root cargo check; manifest 190; tools 78 unit +39 integration +1 doctest; Worker 918 unit +110 integration; Runtime 348 unit +34 binary; Server 708 library +11 binary including 17 real DB+LocalFileSystem signed-API adapter tests. Native image capture/replay, multichunk revision bounds, Workdir import, concurrent CAS, current grants, response-loss reconciliation and dependent config WIP0.2 regressions pass. WIP crates.io 0.2.0 resolution verifier, fmt and diff checks pass.
2026-10-09 03:01:41 +09:00
Hare 8affa46bce feat: add bounded Workspace binary transport and native WIP attachments
Keep JSON and raw-byte authority paths distinct. Runtime signs exact method/query/worker/body; binary requests are bounded, reject target normalization and redirects, and sanitize transport errors. Native attachments accompany the validated WIP value and exact validator through existing ToolOutput capture/replay. Reuse scoped Workdir binary reads with complete SHA256 verification.

T-723 validation: binary transport/reviewer denial, native Invoke image capture and history replay, and bounded Workdir image helpers pass. Complete changed-crate suites and root cargo check passed on the combined Ticket implementation.
2026-10-09 03:01:14 +09:00
Hare cb8784c108 fix: integrate safe runtime proof diagnostics 2026-10-09 03:00:40 +09:00
Hare e67d75615d chore(ticket): incorporate integrated Drive and structured WIP contracts
# Conflicts:
#	openapi/server-api.json
#	web/workspace/src/lib/generated/companion-api.ts
#	web/workspace/src/lib/generated/repository-api.ts
#	web/workspace/src/lib/generated/runtime-api.ts
#	web/workspace/src/lib/generated/ticket-api.ts
#	web/workspace/src/lib/generated/worker-launch-api.ts
2026-10-09 02:54:09 +09:00
Hare 7bb4096373 fix: retain safe runtime proof rejection diagnostics
T-729: distinguish issued_in_future from expired with exact checked times and overflow-safe deltas; retain request-binding mismatch reasons and proof verification progress. Correlate claimed Runtime/Worker/JTI via fixed-size fingerprints and server-generated rejection IDs, bound request metadata, omit query/raw claims/error/body/header/key material. Preserve allow/deny ordering and generic 401 responses; document diagnostic limits and T-728 policy ownership. Reported same-machine incident remains unconfirmed.

Validation: worker-runtime auth filter 3 passed; worker-runtime crate 345 lib + 17 per binary passed; Server auth logging 3 passed (17 rejection cases on both routers plus bounded metadata and generic repository401); workspace_config_integration 12 passed; Server crate 692 lib + 11 bin passed; root cargo check; cargo fmt --all -- --check; rustfmt included config tests --check; git diff --check HEAD. Existing no-default Runtime feature-gate breakage remains documented and out of scope.
2026-10-09 02:53:23 +09:00
Hare 5244308c0d feat(ticket): align Web actions and instructions with intent-led work 2026-10-09 02:51:22 +09:00
Hare 717ff2555f fix: migrate server config test helpers to WIP object API
T-729 validation prerequisite approved in Ticket seq7. Preserve Backend authority, attachment, mutation, stale observation and unknown-outcome assertions using public Tree, path-centered Inspect and structured InterfaceReference Invoke. No production API expansion.

Validation: cargo test -p yoi-workspace-server --lib workspace_config_integration (12 passed); git diff --check HEAD.
2026-10-09 02:47:56 +09:00
Hare d4ed6192ea fix: align ticket web consumers with generic worker assignments 2026-10-09 02:36:59 +09:00
Hare ea1badc0be chore: merge develop into hare/develop
# Conflicts:
#	crates/api-macros/src/axum.rs
2026-10-09 02:28:08 +09:00
Hare f1287f27e7 fix: restore console run accounting from persisted logs 2026-10-09 02:27:27 +09:00
Hare af655ae632 feat: limit checkout indexing to entrances and expose bounded typed discovery
Content directories always have no indexable children; direct authorized paths remain resolvable. Add List using provider Read/enumeration authority and separate List permission, dirs-first lexical live continuation, bounded retention/path bytes, scoped result coordinates and External DTO validation. List/Glob/Grep return Descriptor-typed entries without eager acquisition. Bind content Interfaces coherently to the live entrance scope.

Validation: root cargo check; FS 58 unit+6 pagination, Workdir 125+5 (default and http-client), Tools 84 unit+39 integration+1 doctest, Worker 901 unit+110 integration, Server 691 unit+11 CLI, Server API 83 tests; exact crates.io WIP 0.2.0 resolution; format/diff checks. Focused model/local/remote/provider/race/scope checks passed. Commands and semantics in docs/development/wip-integration-validation.md.

Publication/review paused: continuation ShowTicket returned HTTP 401. No Backend bypass, source push, MR approval, target integration or live environment update is claimed.
2026-10-09 02:22:52 +09:00
Hare 6445999120 fix: migrate dependent server WIP tests to public object tools
Dependent test compilation exposed removed discover, opaque Interface strings and private call usage. Select structured references from actual path Inspect and invoke through the public WIP 0.2.0 API.

Validation: complete Workspace Server suite (691 unit + 11 CLI), Server API 83 tests including generated artifact freshness, root cargo check and SDK resolution verification passed.
2026-10-09 02:22:18 +09:00
Hare 37a13e3566 fix: resolve target-qualified ancestor interfaces through live publications
Add a provider-owned routing hint without granting authority. Fetch checks provider ownership and re-resolves one coherent target/scope publication; default self/shared scope behavior remains unchanged.

Validation: 7 ancestor regression tests, 901 Worker unit and 110 integration tests, root cargo check, formatting and diff checks passed.
2026-10-09 02:22:18 +09:00
Hare 32c2227e8e fix: integrate guarded SSE image recovery 2026-10-09 01:51:43 +09:00
Hare edf5368e09 fix: (agen) keep malformed SSE errors diagnostic-only
Resolve MR finding raw_error_data_authorizes_image_correction. Unparseable error frames retain bounded raw_data diagnostics under a neutral base message; echoed image wording cannot authorize attachment removal. Parser-to-Engine regressions assert one request, unchanged history/images, and retained raw data for malformed numeric message and non-JSON error payloads.

Validation passed: focused unparseable_stream_error_data test; all 18 image_recovery_test tests; worker image_recovery_tests (2 route matrices); root cargo check; full cargo test -p agen, agen --features codex, and worker; cargo fmt --all -- --check; git diff --check HEAD.
2026-10-09 01:46:06 +09:00
Hare f9d4c97f1e feat: integrate WIP 0.2.0 object-centered tools 2026-10-09 01:34:42 +09:00
Hare 5480421fcc fix: (agen) recover pre-output SSE image size rejections
Handle OpenAI Responses error and response.failed diagnostics without broadening status-less HTTP retry authority. Reuse the durable ViewImage correction gate and replace the stream pump only before output/tool admission; partial streams retain terminal cleanup and are never replayed.

Regression coverage: parser-to-engine correction, pairing/largest candidate, exhaustion/no image, unrelated invalid_value, partial text/reasoning and exactly-once side effects, commit failure, filesystem persistence before retry, cancellation, restore/reseed.

Validation: cargo test -p agen --test image_recovery_test (17 passed); cargo test -p worker --lib image_recovery_tests (2 route-matrix tests passed); root cargo check; cargo test -p agen; cargo test -p agen --features codex; cargo test -p worker; cargo fmt --all -- --check; git diff --check HEAD. All passed.
2026-10-09 01:33:41 +09:00
Hare c1b3b95c5d test: wip validate scope replacement and target compatibility 2026-10-09 01:13:15 +09:00
Hare 23cf6c4f88 fix: wip bind live ancestor scopes and adopt 0.2.0 2026-10-09 01:00:12 +09:00
Hare 85c9b218dd feat(wip): integrate scoped SDK and object-centered tools
Vendor the reproducible 1cbe03b4 Client/HTTP/Protocol/Text View snapshot with Cargo checksums and credential-free Nix dependency closure. Migrate native and compatibility publications to structured references and scope_ref, preserve target-first preconditions and frozen call descriptors, and expose Tree/Inspect/Invoke with complete edge coverage and official signatures.

Validation: worker 888 unit + 110 integration tests; pinned upstream Client63, HTTP39, Protocol23, TextView20 tests/doctests; root cargo check --locked --offline; format/diff checks; 43-file vendor checksum verification; nix build --no-link .#yoi.cargoDeps. Details and provider migration seams: docs/development/wip-integration-validation.md.
2026-10-09 00:12:38 +09:00
Hare b5ea162f83 feat(drive): expose authorized typed Workspace Drive API
T-722: reuse T-721 storage/CAS/receipts with clone-bound transaction authorization against attached Server authority. Add migration 84 audited Worker read_only/read_write grants and removal/deletion fencing, member-facing ordinary access, owner-controlled grant settings, Workspace-bound decimal entry references, bounded text/binary chunks, streamed HTTP receive/download with integrity and safe headers, typed errors and generated Rust/OpenAPI/TypeScript contracts.

Validation: root cargo check; server-api 83 default / 91 typescript tests; FeatureStorage 16; Drive 31 unit + 12 integration; Workspace Server 691 library + 11 binary tests (--test-threads=4), including 9 real DB/LocalFileSystem HTTP tests for two Workers/non-owner usage, revoke during reception, concurrent CAS, response-loss receipts, chunk expiry and safe binary media. cargo fmt --all -- --check and git diff --check HEAD passed. Existing OpenAPI schemas/routes semantically unchanged; dependent TS digest projections regenerated.
2026-10-09 00:02:09 +09:00
Hare 9da79ab9f0 feat(api): support typed binary success response bodies
Preserve byte-exact BinaryBody responses in generated Axum/Reqwest adapters, declared response headers, metadata and inline binary OpenAPI schemas. Request and JSON/error behavior stay unchanged. Validated all-feature api-macros/api-macros-impl suites including 5 binary response tests, existing HTTP adapters, OpenAPI and compile-fail contracts.
2026-10-09 00:02:09 +09:00
Hare 60ec815237 chore: merge approved Ticket Worker launch into develop 2026-10-08 23:06:49 +09:00
Hare 3637824c8c fix(storage): persist metadata ancestor links before SQLite admission
Address MR finding drive-metadata-directory-durability. Sync every configured and resolved metadata directory ancestor before initializing/migrating SQLite; re-sync existing links on retry and propagate failures without admitting/caching a usable database.

Validation: metadata ordering/failure/retry tests; FeatureStorage16, Drive29unit+12integration, Subjektiv36, Server649lib+11bin (threads4); root cargo check; fmt/diff checks. strace of first-use CRUD confirms fsync(metadata/ws/features), fsync(metadata/ws), fsync(metadata) before DB initialization. No physical power-cut claim.
2026-10-08 21:53:34 +09:00
Hare bb1b05ed20 fix(ticket): preserve uncertain launch claims on local replay rejection 2026-10-08 21:53:28 +09:00
Hare 633522278b feat(drive): add durable Workspace document storage and lifecycle
Use object_store 0.13.2 immutable local blobs and FeatureStorage SQLite trees, revision CAS, same-transaction receipts, bounded reads/search, staged/orphan GC and retryable deletion. Attach Server authority to serialize cached Drive operations with deletion reservation. Document fsync compensation, Linux guarantees and offline DB-plus-blob restore.

Validation: root cargo check; workspace-drive 29 unit + 12 integration tests; feature-storage 13 tests; workspace-server 649 library + 11 binary tests with test-threads=4; cargo fmt --all -- --check; git diff --check HEAD. Default-parallel Server run hit the existing ticket_checker_burst timeout assertion (648 passed); the isolated filter and bounded-parallel full suite passed. Fault tests are not physical power-cut evidence.
2026-10-08 21:39:51 +09:00
Hare 761de69e18 feat(ticket): generalize Worker launch and durable resource claims 2026-10-08 21:36:33 +09:00
Hare e5ea7544d4 Merge branch 'develop' into hare/develop 2026-10-08 20:46:36 +09:00
Hare 1a095315ee chore: merge approved optional workspace creation into develop 2026-10-08 19:58:04 +09:00
Hare 148da0b3d9 test(workspace): preserve member-facing access without repositories
Apply T-717 item6/thread7 user decision: settings stay owner-controlled, ordinary non-owner viewing remains permitted under existing authentication. Add real HTTP assertions for non-owner workspace reads and absent management permissions; existing owner-only repository/deletion mutations and anonymous rejection remain exercised. Replace obsolete pending-policy documentation; no production authorization policy change.

Validation: targeted repository-free HTTP test, root cargo check, yoi-workspace-server 639 lib + 11 bin tests, canonical OpenAPI freshness, cargo fmt and baseline/HEAD diff checks pass. Rust tests/documentation only; rendered UI and previously reviewed browser/visual evidence are unchanged.
2026-10-08 19:41:41 +09:00
Hare df390f02e9 feat(ticket): decouple audited lifecycle decisions from MR integration
T-718: unify state, completion, close and reopen with explicit CAS and operation receipts; keep MR integration proofs independent. Queue only the explicitly selected Ticket and fence target edits against active Worker grants. Align REST, Worker/WIP, evidence projection and generated contracts.

Validation: root cargo check; full ticket, merge-request, client, worker, yoi-workspace-server and server-api tests; server-api typescript feature; OpenAPI and six generated API checkers; Svelte check and 36 narrow Web tests; fmt and diff checks.
2026-10-08 19:12:39 +09:00
Hare f8a9555626 docs(workspace): specify optional creation and replay semantics
Document current-key replay, saved receipt compatibility, explicit entry points, zero-Repository lifecycle guards, and the unresolved viewing-policy decision. Normalize visual review evidence EOF.
2026-10-08 18:35:50 +09:00
Hare 7919616db5 feat(workspace): allow creation without an initial repository
Keep bootstrap, signing identity, config and resource-key allocation atomic with optional Repository intent. Preserve repository-present fingerprints for saved receipts; replay reads current authority at the initial key and never recreates missing assets.

Provide explicit repository-free CLI creation, optional TUI/Web creation inputs, nullable generated contracts, and valid empty catalog/Worker paths. Retain existing authenticated non-owner viewing policy pending the T-717 authorization decision.

Validation: root cargo check; server tests 639 lib + 11 bin; server-api 70 default / 77 typescript; client 52 lib + 2 integration; tui 337; yoi 11 lib + 120 bin. OpenAPI/TS freshness, cargo fmt and diff checks pass. Web check/build, 18 model tests, 268 component tests and Chromium 8 width/theme combinations pass; before/after visual evidence is documented in web/workspace/test/visual-review. Full Web suite has one independently reproduced baseline Ticket source-policy failure.
2026-10-08 18:34:44 +09:00
Hare e939cd4e4b fix(engine): keep tool truncation notices in tool results
Stop emitting a user-facing Engine warning for ordinary output limiting while preserving structured size diagnostics and the model-visible truncation marker. Keep the Worker warning bridge for genuine warnings.

Regression coverage proves bounded ASCII/UTF-8 results, per-tool limits, attachments, dispositions and commit/model agreement, plus absence of live/buffered truncation alerts and preservation of other Engine alerts.

Validation: cargo check; cargo test -p agen; cargo test -p worker; targeted callback test with codex; cargo fmt --all -- --check; git diff --check HEAD.
2026-10-08 17:33:15 +09:00
Hare b715b1ee37 fix(web): label current Ticket approval from requirement attestation
T-716 MR seq3 CURRENT_REQUIREMENT_APPROVAL_USES_INTEGRATION_PROOF: derive the requirement approval label from review_after_rescope rather than approved_current_subject. Preserve separate persisted integration/source approval display. Strengthen the Web regression for approved integration with stale current requirements and recovery by exact current attestation; require the Ticket route to render that tested status projection.

Validation: 28 focused Deno decoder/status/resource/route-reuse tests; deno task check (0 errors/warnings); root cargo check; cargo fmt --all -- --check; git diff --check HEAD. Rust contracts unchanged from validated source14fea520.
2026-10-08 16:34:37 +09:00
Hare 14fea520df merge(develop): retain active-work guards with immutable Ticket evidence
T-716: incorporate T-715 (b6de908e) into the existing Ticket source branch only. Resolve MR read/readiness conflicts by keeping persisted merged-result evaluation and active assignment selection for open source observation. Preserve responsibility records and terminal work releases. Update temporary API regression fixtures to distinguish retained identity from active work.

Narrow validation: merge-request store 21 tests; Workspace Server Ticket evidence API 5 tests, including done/merged remote evidence without active assignment and unavailable open source with retained released responsibility.
2026-10-08 16:20:38 +09:00
Hare 5424280348 fix(ticket): project immutable results and typed source observations
T-716: merged evidence uses recorded result approval; open source reads use Runtime provider authority and preserve unavailability. Current requirements use the shared exact snapshot evaluator. Remove primary-MR/report SQL heuristics; continue bounded query scans through nonmatching candidates. Align Worker/Web projections and explain lifecycle versus integration/attestation. Synchronize checker test on delivered inputs, not pre-delivery attempt state.

Validation: root cargo check; cargo test -p merge-request (30), -p server-api (70), -p worker (949), -p yoi-workspace-server (620 lib + 11 binary); server-api typescript feature check; 32 focused Deno tests; deno task check (0 errors/warnings); cargo fmt --all -- --check; git diff --check HEAD; canonical OpenAPI/generated Ticket artifact checks.
2026-10-08 15:44:27 +09:00
Hare 4d0f2afc1e fix(merge-request): share immutable integration and requirement evidence
T-716: validate recorded source/approval/request identity, chronology and revocation independently of mutable selectors. Reuse exact revision and complete linked-source attestation in CompleteTicket. Assignment and lifecycle mutation are unchanged.\n\nValidation: cargo test -p merge-request (9 evidence and 21 store tests).
2026-10-08 15:44:26 +09:00
Hare b6de908e9f fix(ticket): separate retained responsibility from unfinished work
T-715: end assignment work identities atomically on done/close without deleting responsibility. Reopen never reactivates old authority. Schema 82 preserves legacy closed assignments, historical removal plans and Worker attribution; active work drives admission, auth/routing, retention and cleanup while independent lifecycle/attachment fences remain.

Validation: root cargo check; cargo test -p yoi-workspace-server (630 lib + 11 bin), -p merge-request (20), -p worker (947); worker-runtime restore/removal filters (2); Deno ticket responsibility/runtime UI contracts (12); cargo fmt --all -- --check; git diff --check HEAD.
2026-10-08 15:35:16 +09:00
Hare e723afe5f5 fix: authorize restore coordination with worker input capability 2026-10-08 15:33:38 +09:00
Hare 56ab8c22ba fix: preserve generated API error details in logs 2026-10-08 15:33:38 +09:00
Hare b0d8c7b786 chore: merge develop into hare/develop 2026-10-07 18:03:33 +09:00
Hare cfacf04260 fix: prevent subject startup deadlocks and diagnose auth rejection 2026-10-07 17:56:48 +09:00
Hare f086cf3375 feat(profiles): seal builtin import provenance and expose read-only editor imports
Retain the evaluated JSON launch entrypoint, seal observed builtin source bytes and digests as verified provenance, and fail on missing/corrupt dependencies without Runtime builtin reevaluation. Cover real HTTP commits and launch resolution, including worker mode and Workspace Config feature composition.

Expose read-only builtin import completions/diagnostics in the editor and rebuild wasm32 release assets with wasm-bindgen 0.2.117. Document public paths, ordinary composition, limits, resave semantics, and the lazy-cycle incident.

Validation: worker-runtime 344 library + 34 integration tests; workspace-server 609 library + 11 binary tests plus final builtin HTTP/launch tests (2); archive tests (16); native WASM tests (2); real-WASM/web tests (37), editor component tests (10); root cargo check, cargo fmt --all -- --check and git diff --check HEAD pass.
2026-10-07 03:38:49 +09:00
Hare 4343be86c1 feat(config-source): add confined read-only builtin Decodal imports
Share the explicit embedded Profile catalog with native and WASM evaluators. Preserve ordinary Decodal values, isolate builtin relative imports, reject reserved Workspace mutations, and capture the exact loaded builtin closure. Guard lazy import cycles and dependency depth before evaluation recurses.

Validation: config-source 48 tests, builtin-source 2 tests, manifest 185 tests; root cargo check, formatting and diff checks pass. Existing contract version/fingerprint stay unchanged; archive provenance binds builtin content instead of invalidating stored Workspace metadata.
2026-10-07 03:35:59 +09:00
Hare a64707ee69 feat: integrate value-based Workspace Profiles 2026-10-07 03:04:07 +09:00
Hare e24fbabe54 fix: align Profile authoring with compaction and reasoning contracts (T-710)
Resolve MR seq9 supported-compaction-fields and numeric-extraction-reasoning findings. Cover all canonical CompactionConfigPartial settings, token aliases and ratio helpers; accept string effort and signed integer extraction budgets without materializing editor defaults. Audit the remaining Profile field groups against their real serde contracts.

Share an actual-provider value corpus across native, generated WASM, and shared save/projection/verified Runtime archive consumption. Prove inline/import/patch exact values and effective Manifest settings; gate canonical compaction field coverage against serialization of the actual partial type. Keep prior scope union and worker/feature diagnostics fixes intact.

Validation: root cargo check; config-source40; unfiltered server644+11; Runtime340+17+17; API typescript77; Deno39; deno task check0/0; wasm32 release regeneration byte-identical with wasm-bindgen0.2.117/Binaryen132; cargo fmt/diff checks. Logs target/t710-contract-{check,config-source,server,api,runtime}.log. Reviewer seq9 independently confirmed seq3/5/7 resolution and correct main/relative-cwd routing. No target integration/ref mutations.
2026-10-07 02:51:29 +09:00
Hare 61f0469986 fix: preserve string and table Profile scope authoring (T-710)
Resolve MR sequence 5 profile_authoring_rejects_valid_string_scope_intents. Decodal 0.4 has no union constraint: retain an opaque scope range with non-materialized table completion hints so string intents remain valid. Keep shared Backend semantic validation authoritative for scope forms/types/unknown keys without changing persisted values or weakening worker/feature editor diagnostics.

Prove actual-provider native/WASM scalar/table, inline/import/patch, nested intent/deny_write/symlink_policy completion and evaluation invariance. Add real save/projection/Runtime scope equivalence and invalid-scope save non-loss coverage. Regenerated WASM artifact is byte-identical; the changed shape is transported via the fingerprint-bound Backend schema metadata.

Validation: root cargo check; config-source39; value_profiles4; unfiltered server643+11; worker-runtime340+17+17; server-api --features typescript77; wasm32 release/wasm-bindgen0.2.117/Binaryen132 -Oz; Deno39; deno task check0/0; fmt/diff checks. Logs target/t710-scope-{check,server,server-api,runtime}.log. No target/ref integration changes.
2026-10-07 02:25:16 +09:00
Hare 728ea3d915 feat: integrate standalone subjektiv support 2026-10-07 02:04:30 +09:00
Hare 24ae6288a5 feat(subjektiv): share domain and add explicit standalone Subject hosts 2026-10-07 01:52:06 +09:00
Hare 3558e4aae1 fix: diagnose nested partial Profile values in the editor (T-710)
Resolve MR sequence 3 profile_nested_editor_diagnostics_missing with a separate, non-materializing authoring constraint pass. Preserve omission and the persisted evaluation schema, and map nested/imported failures to supplied virtual-source spans. Exercise actual Backend schema in native and regenerated WASM tests for empty/partial values, worker and feature types, unknown fields, imports and composition.

Validation: root cargo check; config-source 38; config-source-wasm native/doc; unfiltered yoi-workspace-server 642 lib + 11 bin; worker-runtime 340 lib + 17 per binary; server-api --features typescript 77; focused Deno 39; deno task check; wasm32 release build, wasm-bindgen 0.2.117 + Binaryen 132 -Oz regeneration; cargo fmt/diff checks. Earlier checker failure did not recur: Reviewer independently passed full source suite and exact original baseline checker filter, recorded in MR sequence 3.
2026-10-07 00:36:16 +09:00
Hare ed3bcf35bd fix(worker): remove Wip prefix from gateway tool names (T-712)
Expose Discover, Inspect, and Call in WIP mode and update schema descriptions and current documentation. Preserve execution, argument schemas, internal types, and ordinary Tools mode. Add a registered-tool discovery/inspection/call regression.

Validation: cargo test -p worker --lib wip::tests:: (43 passed); cargo test -p worker (827 unit + 110 integration passed); root cargo check; cargo fmt --all -- --check; git diff --check HEAD.
2026-10-07 00:31:33 +09:00
Hare 58462d5844 feat: register Workspace Profiles as Decodal values (T-710)
Project the evaluated Workspace Profile value into a revision-bound JSON archive without source-path registration or Decodal re-evaluation. Preserve partial-value omissions and explicit overrides, validate before save, and reject legacy registrations with a documented explicit migration.

Fix array-element schema completion and provide fingerprint-bound authoring shapes independently of materialization defaults. Carry metadata through REST, regenerate TypeScript/OpenAPI/WASM artifacts, and exercise save/projection/Runtime consumption and persisted Manifest restore boundaries.

Validation: root cargo check; cargo test -p config-source; cargo test -p worker-runtime; cargo test -p server-api --features typescript; focused profile_settings/value_profiles/archive tests; 39 web config-source/profile API tests; deno task check; cargo fmt --all -- --check; git diff --check HEAD.

Full workspace-server test: 641 passed, one pre-existing ticket_checker_suppresses_stale_and_clean_results_and_diagnoses_invalid_output assertion failure. The same filter fails at base 3c424fd17d in a separately archived source tree and isolated target directory. Remaining server crate tests pass with only that filter skipped (641 lib + 11 bin); unrelated checker code is unchanged.
2026-10-07 00:14:51 +09:00
Hare 13055d7ee1 feat: execute durable standalone Jobs through Host-owned Internal Workers (T-708) 2026-10-07 00:08:01 +09:00
Hare 5c95859d39 chore: merge develop into hare/develop 2026-10-06 20:45:19 +09:00
Hare 3c424fd17d fix: budget subjektiv batches for compact verified Job results (T-704) 2026-10-06 19:58:11 +09:00
Hare d12cdc9106 feat: caller-selected Backend Jobs and bounded subjektiv consolidation (T-704) 2026-10-06 19:45:37 +09:00
Hare 6f9621ca2e fix: retain Restore recovery intent and retire stale caller conflicts (T-701) 2026-10-06 18:15:31 +09:00
Hare fdce12a47b feat: guarded Worker Restore from shared Web actions (T-701) 2026-10-06 17:45:54 +09:00
Hare 1a6d391f83 refactor: integrate registry-bound worker operations 2026-10-06 14:58:49 +09:00
Hare 849a6b4c1c fix(server): route embedded WorkerRemove through registry-bound reception 2026-10-06 14:50:31 +09:00
Hare 7d8e595270 docs(report): record command output readback limitation 2026-10-06 14:24:23 +09:00
Hare 4892a82a28 refactor(server): unify registry-bound workspace worker operations 2026-10-06 14:24:23 +09:00
Hare 4f38f7d5b0 refactor(worker): share file contracts across Tools and WIP providers
Flatten shared typed Tool arguments and derive WIP parameters and checkout allowlists from core schemas. Workspace settings uses shared read/write/edit processing within its captured-read and canonical tree-CAS commit path. Identical settings edits now reject before read or commit; provider response contracts and unknown-outcome handling stay intact.

T-707 validation: root cargo check; fs-operation (58); tools (74 lib, 39 integration, 1 doctest); worker (802 lib, 109 integration); workdir --features http-client (125); yoi-workspace-server --lib workspace_config (19); cargo fmt --all -- --check; git diff --check HEAD.
2026-10-06 14:18:34 +09:00
Hare 4511d4f8ac refactor(fs-operation): extract provider-neutral text operations
Share typed read/edit/write arguments, Operation schemas, decoding, pure outcomes, byte bounds, replacement policy and numbered rendering. Keep filesystem CAS and descriptor-protected mutation within the provider.

T-707: cargo test -p fs-operation passes (58 tests); overflow, Unicode, limits and local checked-save regressions are covered.
2026-10-06 14:18:34 +09:00
Hare 4ceabef40e docs: require reading test design rules before editing tests 2026-10-06 13:31:37 +09:00
Hare 3029e77c7a fix: remove tests that pin mutable profile defaults 2026-10-06 13:31:37 +09:00
Hare b96bd110c6 refactor(worker-runtime): route by WorkerRef and reconcile owned execution cleanup 2026-10-06 09:13:46 +09:00
Hare 0e2a6f2860 fix(worker): bind protocol lifetime to controller endpoints and join startup observers
T-700 prerequisite: expose real method-channel closure and endpoint identity without introducing WorkerRef routing tokens or catalog liveness mirrors. Delay command observer creation until fallible head/recovery/runtime writes finish; abort and join it on socket startup failure.

Validation: cargo test -p worker (909 tests including integration targets); focused controller startup ordering regression; git diff --check HEAD. Full Runtime/Server validation and MR publication follow after the dependent T-700 implementation is clean.
2026-10-06 08:26:09 +09:00
Hare 2c023ac2be fix(workspace-config): fence user editors from runtime source proofs
Resolve MR finding WC-AUTH-001: reject authored source-tree and Profile editor requests from Runtime/Worker proofs in both scoped and single-Workspace middleware. Keep legitimate UI editing and independent Prompt/Skill/config-bundle consumption contracts. Add signed-router authority-state matrix and authenticated UI/WIP positive regressions.
2026-10-06 07:14:31 +09:00
Hare 0a471242cb feat(workspace-config): project grant-bound logical settings through WIP 2026-10-06 06:56:51 +09:00
Hare 7a96c42130 fix(checkouts): preserve scoped descriptor ignore rules
T-699 rev20, MR 01a10d66-db02-70c2-b152-197aca92d6b7 seq3 native_glob_ignore_regression. Load authorized root/nested ignore sources through FsAccessPolicy descriptor opens, retain only bounded ancestor matchers, preserve source precedence/negation/anchors and prune ignored directories before enumeration. Expanded parity also exposed Grep source-class precedence and ignored-directory rescue errors; use the shared matcher without relaxing Grep's existing ignore-open/Git-marker provider contract. No ambient global/linked-worktree administration pointer traversal or unsafe WalkBuilder ignore loading.

Add 7 fs boundary tests, 4 actual Local/scoped provider parity tests and 1 native WIP search/link regression. Current corrected source passes cargo check --workspace --all-targets; cargo test -p fs-operation -p workdir -p tools -p worker (fs37 Workdir125 Tools72+10+29+1doc Worker780+109integration); cargo test -p worker-runtime -p yoi-workspace-server (Runtime279+17+17 Backend576+11); fmt/diff. Logs target/validation/T-699/rereview-{check,core,hosts}.log. Earlier intermediate parity/WIP assertion failures retained, not passing evidence. No target/ref integration, RO source changes, environment update or completion.
2026-10-06 04:24:35 +09:00
Hare b952e56bc2 test: use required Bash cwd in compatibility regressions 2026-10-06 03:44:03 +09:00
Hare ae19426298 fix: preserve sanitized dangling-symlink read diagnostics 2026-10-06 03:42:06 +09:00
Hare 603a814b80 Merge commit '5670c20a6a50077985168269dfc15a6776c66ba6' into work/T-699-checkout-projection 2026-10-06 03:37:07 +09:00
Hare 149853bb0e feat: project attached checkouts with scoped native AI operations 2026-10-06 03:37:07 +09:00
Hare 5670c20a6a fix: integrate develop and preserve invocation notification recovery 2026-10-05 22:25:32 +09:00
Hare c847c2ffad fix: cancel pending uploads when composer chips are removed 2026-10-05 20:55:17 +09:00
Hare 9812e68b4d fix: synchronize native picker interception in Feature browser tests 2026-10-05 20:14:19 +09:00
Hare 9146331450 fix: echo REST completion nonce and argument context 2026-10-05 20:14:19 +09:00
Hare 1a45542842 fix: preserve invocation recovery across rewind and revalidate replay authority 2026-10-05 20:14:19 +09:00
Hare 3deef49897 fix: reconcile T-697 generated contracts with latest develop 2026-10-05 19:35:04 +09:00
Hare c57e236768 fix: update builtin Sol and Luna model defaults 2026-10-05 19:15:02 +09:00
Hare f5c6b0aeb1 fix: deduplicate console entries and contain worker rendering errors 2026-10-05 19:13:15 +09:00
Hare 31f7847d1f fix: preserve multiple positional invocation arguments and update API schema 2026-10-05 19:07:23 +09:00
Hare fa1169c556 docs(report): record reviewer severity schema mismatch 2026-10-05 19:01:13 +09:00
Hare 6feed0f22f fix(wip): page complete workdir catalogs and fence full connection sets 2026-10-05 19:01:13 +09:00
Hare 6972928612 feat: integrate persistent Subject behavior context 2026-10-05 18:48:12 +09:00
Hare a3c3bda3fa feat: add enlarged previews for console images 2026-10-05 18:45:23 +09:00
Hare f7783b3d2a feat: add declarative Feature chat invocations and typed composers 2026-10-05 18:44:41 +09:00
Hare 0fe61df25d fix: integrate serialized orchestrator attention 2026-10-05 18:10:12 +09:00
Hare 01156f4c78 docs: report SubWorker cwd attachment-root ambiguity 2026-10-05 18:10:01 +09:00
Hare 42e4ce5550 feat: publish Repository and Workdir WIP objects
Use Host root namespace ownership and disjoint Feature operation contributions. Separate read-only workdir_catalog from manage_workdir, encode all existing identities canonically, publish safe bounded inventory and lifetime-bound attachment Objects, and reuse normal lifecycle/session router/lock authority.

Contextual interfaces resolve the current permission/capability intersection; object and interface validators reject stale cached access. Cover fresh workspace WIP-only discovery/create/attach/read/detach, readonly and unsupported targets, collision/revocation/alias reuse, active cleanup exclusion and terminal unknown outcomes without retries.

Validation: WIP 40 tests; worker 730 unit + 96 integration tests serial; manifest 182 tests; workspace-root cargo check; cargo fmt --all -- --check; git diff --check HEAD.
2026-10-05 18:10:01 +09:00
Hare bbfbf92264 feat: bind Workdir attachments to durable connection lifetimes
Add caller-scoped bounded connection inventory and conditional detach on the existing ledger/session lifecycle. Preserve lifetime identity during attenuation and compensation, migrate persisted rows, and bind self operations to verified Runtime/Worker proof.

Validation: workspace-root cargo check; Backend 561 unit + 11 CLI tests; server-api 62 default + 69 typescript tests. Canonical OpenAPI and generated TypeScript source digests regenerated; browser declarations unchanged.
2026-10-05 18:10:01 +09:00
Hare 0a8f1f3b1b fix(workspace-server): drain Restore rechecks after reserved no-op checks
T-703 review follow-up: retire only the exact pre-Restore accepted ID, preserve pending deliveries, and retain an explicit deferred Restore recheck when another caller owns the reservation. Atomically release/take deferred work at completion and drain it without holding a Runtime lock.

Regression fixes the independently identified 3174142b interleaving: pause the real reservation before fingerprint comparison and after a no-op match, accept an actual fixture Restore, and verify exactly one new send after reservation completion. Also verify unknown delivery ID/content survive Restore.

Validation: cargo check; cargo test -p yoi-workspace-server (566 lib +11 bin); cargo test -p worker --lib notification_ (14); cargo fmt --all -- --check; git diff --check HEAD. Previous full Worker serial 703 lib+96 integration remains applicable (Worker unchanged in this fix). Tool schema rejection/Reviewer one-call barrier recorded in docs/report.
2026-10-05 18:01:10 +09:00
Hare 3174142bd1 fix(workspace-server): serialize explicit orchestrator backlog attention
T-703: snapshots establish baselines; only observed Running -> Idle rechecks backlog. Scope reservation and success/pending records to the exact Orchestrator; preserve payload and request ID across bounded retries and Restore races. Drop the launch lock before attention delivery.

Regression evidence: Barrier/parallel start, reconnect snapshots, retry payload identity, Restore/replacement; real Runtime adapter + Worker Controller + canonical Session fixture proves start/Restore send/receipt/commit counts and post-acceptance response-loss dedupe. Worker FsStore regression proves same-ID retry after restore versus legitimate new-ID same-body notification.

Validation: cargo check; cargo test -p yoi-workspace-server (564 lib + 11 bin); cargo test -p worker -- --test-threads=1 (703 lib + 96 integration); cargo fmt --all -- --check; git diff --check HEAD. Default parallel worker test reproduced existing pending_restore_reuses_persisted_session_and_recovers_unknown_attribution ScopeLock NotFound; isolated test and full serial suite pass.
2026-10-05 17:43:11 +09:00
Hare 5e4902db2b Merge latest develop after WIP namespace integration
Normal merge of develop@5a4c823c preserves integrated T-698 controller/native projections alongside the T-692/T-693 reconciliation. Target branch remains untouched.

Validation after this target movement: root cargo check; full worker(serial) and workspace-server tests; cargo fmt --all -- --check; git diff --check HEAD. Earlier reconciliation passed session-store, server-api generated/OpenAPI, full Web and production browser-shell checks.
2026-10-05 17:34:47 +09:00
Hare a4af26e8fd Merge develop into T-693 and reconcile Subject behavior with Memory information
Normal merge of develop@b0bce50b retains T-692 state hierarchy, diagnostics disclosures, ready-empty and candidate-only regressions alongside T-693 behavior/CAS/route fences. ResidentContext load and refresh retain the five-second timeout from 685b8aa6, with a seven-request regression.

Validation: root cargo check; full worker(serial), session-store, workspace-server and server-api(typescript) suites; frontend check with zero diagnostics; 464 Web tests and 171 component tests (19 Memory); production Memory browser-shell test/build; fmt/diff/OpenAPI checks.
2026-10-05 17:31:17 +09:00
Hare 5a4c823c40 feat: integrate host-owned WIP namespaces 2026-10-05 17:17:27 +09:00
Hare d3a1788445 fix: pin WIP cancellation to the active operation provider
Resolve WIP_CANCEL_ROUTING from MR 01a10ac8-c63a-7e33-bc27-07a52f87abe9. Retain the dispatched handler instance and selected operation per active execution; forward cancellation only to that contributor, not unrelated providers or shared-handler aliases. Keep cancellation terminal confirmation and failure classification unchanged.

Validation: contributed_cancellation tests (2 passed), all WIP tests (23 passed), root cargo check, cargo test -p worker -- --test-threads=1 (713 unit and 96 integration passed), cargo fmt --all -- --check, and git diff --check HEAD. Static/dynamic pending-call regressions cover unrelated cancel errors, shared handler duplication, exact dynamic handler identity, unknown IDs, terminal cleanup and cancelled audit.
2026-10-05 17:08:39 +09:00
Hare b0bce50bb4 chore: integrate Subject Memory information improvements 2026-10-05 17:08:32 +09:00
Hare 06480b9c7c Fix Subject behavior editor isolation across reused routes
Reset editor state for each loader identity and bind saves to their captured Subject and Workspace. Fence late success, error, and finally updates using the loader generation, including navigation back to the same Subject.

Validation: 14 Memory component tests (5 new route/workspace/in-flight isolation cases); frontend check with zero diagnostics; production Memory browser shell test; cargo check; cargo fmt --all -- --check; git diff --check HEAD. Restored implementation full Rust and frontend suites were independently rerun before this Web-only fix.
2026-10-05 16:59:13 +09:00
Hare b981e60231 test(web): document Subject Memory information decisions 2026-10-05 16:58:35 +09:00
Hare e17e81a9aa fix: enforce WIP namespace ownership and preserve collection identity
Restrict compatibility mounts to single tool routes, reject foreign dynamic Object owners, and prefer explicit Objects over synthetic namespaces during discovery. Document subsequent provider registration and keep reference resolution independent from enabled management operations.

Validation: cargo test -p worker --lib wip::tests (21 passed); root cargo check passed; cargo test -p worker -- --test-threads=1 passed (711 unit, 96 integration tests); cargo fmt --all -- --check and git diff --check HEAD passed. Initial parallel worker suite hit ScopeLock NotFound in pending_restore_reuses_persisted_session_and_recovers_unknown_attribution; the isolated test and full serial suite both passed.
2026-10-05 16:53:39 +09:00
Hare 8891236db3 Add persistent Subject behavior context 2026-10-05 16:27:23 +09:00
Hare 0c644c13e5 fix: preserve failed reviewer handoff evidence 2026-10-05 15:43:06 +09:00
Hare bc7b2f894c feat: expose WIP objects from host namespaces 2026-10-05 15:33:58 +09:00
Hare a00a0575f6 chore: merge develop into hare/develop 2026-10-05 14:06:04 +09:00
Hare 90c74df879 fix: enable indentation keys in Decodal editor 2026-10-05 14:05:45 +09:00
Hare b489a59057 fix: handle configuration schema bodies and editor load failures 2026-10-05 14:05:45 +09:00
Hare 4cf6c130cd fix(web): distinguish empty resident context 2026-10-05 13:59:39 +09:00
Hare fbb09e6597 feat(web): clarify Subject Memory status 2026-10-05 13:56:33 +09:00
Hare cc97987482 fix: preserve ambiguous legacy session attribution 2026-10-05 12:50:47 +09:00
Hare d2a0b75045 fix: finalize subjektiv attribution at session lifecycle 2026-10-05 12:25:20 +09:00
Hare fec85dd38d fix: simplify console mode controls with a compact footer toggle 2026-10-05 01:58:22 +09:00
Hare 685b8aa65f fix: prevent subject worker launch stalls 2026-10-05 01:22:58 +09:00
Hare bd79b93c1d chore: merge develop into hare/develop 2026-10-04 23:28:46 +09:00
Hare e741643717 fix: accept submission completion state in worker API parser 2026-10-04 23:27:50 +09:00
Hare 74a00f9edc fix: recover from provider image size rejections 2026-10-04 23:17:43 +09:00
Hare c6d2ad1f4c fix(test): format Subject browser evidence 2026-10-04 22:52:37 +09:00
Hare c8caa5518a fix(test): use shared Subject singleton key 2026-10-04 22:42:44 +09:00
Hare 3a9def7b80 Merge remote-tracking branch 'origin/develop' into work/T-689-web-subject-create 2026-10-04 22:35:43 +09:00
Hare 1c5966c535 feat(web): add Subject creation to Memory index 2026-10-04 22:35:21 +09:00
Hare 08881fa27a chore: merge develop into hare/develop 2026-10-04 21:03:16 +09:00
Hare 8a2a82d13c fix: close mobile sidebar after navigation 2026-10-04 21:03:16 +09:00
Hare b0d4973717 fix: align console metadata and details controls 2026-10-04 21:03:16 +09:00
Hare 728f03952e fix: recover job cleanup across runtime restart 2026-10-04 15:03:04 +09:00
Hare c7ae825a02 fix: persist worker run completion fence 2026-10-04 14:08:44 +09:00
Hare 8ad52e36c1 test: update worker state fixtures 2026-10-04 13:49:12 +09:00
Hare d8f3e46126 Merge remote-tracking branch 'origin/develop' into work/T-690-backend-job-worker-cleanup
# Conflicts:
#	web/workspace/src/lib/generated/protocol-validator.ts
2026-10-04 13:44:01 +09:00
Hare 20109b88df fix: fence cleanup on tracked run completion 2026-10-04 13:40:10 +09:00
Hare 773907462b Resolve Console images across session lineage 2026-10-04 13:14:36 +09:00
Hare 1fbf93c8c1 fix: fence job cleanup on run teardown 2026-10-04 13:12:39 +09:00
Hare 2eb9418a4e Separate Console image bodies from session snapshots 2026-10-04 12:56:40 +09:00
Hare d3eb7bc66e feat: clean up terminal backend job workers 2026-10-04 12:45:19 +09:00
Hare f7b722246d feat: configure subject attachment on worker launch 2026-10-04 08:40:30 +09:00
Hare 1bbc48dad0 feat(worker): project merge requests as native WIP objects 2026-10-04 03:10:42 +09:00
Hare 983c20c3f7 fix(worker): preserve Ticket WIP outcome semantics 2026-10-04 02:38:55 +09:00
Hare 31ee6b3c6a feat(worker): project tickets as native WIP objects 2026-10-04 02:22:45 +09:00
Hare 28c9d752e3 fix(worker): preserve Objective WIP authority semantics 2026-10-04 01:49:16 +09:00
Hare e5f255b6fd feat(worker): project objectives as native WIP objects 2026-10-04 01:28:45 +09:00
Hare e2181e9052 fix(worker): preserve typed native WIP contracts 2026-10-04 00:46:51 +09:00
Hare e44637519e fix(worker): forward native WIP arguments by descriptor name 2026-10-04 00:31:49 +09:00
Hare 4a05aad508 feat: add explicit Worker WIP mode 2026-10-04 00:26:15 +09:00
Hare 85a8944a6c fix: integrate feature-owned subjektiv restore refresh 2026-10-03 23:49:38 +09:00
Hare 8399d4f79c fix: integrate sidebar workspace alerts 2026-10-03 23:43:27 +09:00
Hare eea873e7dc fix: keep subjektiv restore refresh feature-owned 2026-10-03 23:37:23 +09:00
Hare bf918d1a11 fix: route sidebar failures through workspace alerts 2026-10-03 23:35:43 +09:00
Hare 29ed19fc8c Merge branch 'fix/compact-result-warning' into hare/develop 2026-10-03 21:57:18 +09:00
Hare 75fc7c921b fix: warn instead of failing on oversized compact results 2026-10-03 21:56:58 +09:00
Hare 3875c8e675 fix: preserve system item identity in live events 2026-10-03 21:44:36 +09:00
Hare 00c7e223b1 fix: preserve workdir link columns during schema migration 2026-10-03 21:01:55 +09:00
Hare f637667384 chore: merge develop into hare/develop 2026-10-03 19:14:17 +09:00
Hare 13bce155aa fix subject authority and bounded memory browsing 2026-10-03 01:18:24 +09:00
Hare f4966b78ea feat: cut over Memory to subjektiv product surfaces 2026-10-03 00:06:47 +09:00
Hare 07fcc249fe fix: resume exact reads within large segments 2026-10-02 18:11:51 +09:00
Hare ec7a6f59c8 fix: complete subject session paging 2026-10-02 18:00:30 +09:00
Hare c491cf8a48 fix: make subject session reads resumable 2026-10-02 17:36:10 +09:00
Hare ce841cfee0 Merge remote-tracking branch 'origin/develop' into work/T-673-subjektiv-session-history 2026-10-02 16:52:02 +09:00
Hare ee6aa9de41 feat: discover subject session history 2026-10-02 16:41:29 +09:00
Hare 3ae9b1c6d1 test(workspace-server): update greeting fixture 2026-10-02 16:36:06 +09:00
Hare 07cbff9a5f fix(console): keep live context metadata race-free 2026-10-02 16:25:43 +09:00
Hare 3d37f056ad fix: synchronize live worker context metadata 2026-10-02 16:04:55 +09:00
Hare cf3cf4b766 feat: expose worker model and context metadata 2026-10-02 15:29:45 +09:00
Hare 43e3b42055 feat: integrate bounded subject memory surfaces 2026-10-02 15:11:12 +09:00
Hare dfe837655a fix: preserve resident surface startup states 2026-10-02 15:01:09 +09:00
Hare aad200258c fix: integrate explicit Workspace repository key requirement 2026-10-02 14:43:57 +09:00
Hare 7b13303724 fix: preserve repository key for backend validation 2026-10-02 14:34:51 +09:00
Hare e662e2f465 fix: refresh memory surfaces on restore 2026-10-02 14:32:37 +09:00
Hare 138a8f4cec fix: stabilize persisted run transition identities 2026-10-02 14:31:04 +09:00
Hare 013f909b9b fix: require explicit Workspace repository key 2026-10-02 14:27:52 +09:00
Hare 504ea00ae3 fix: harden memory surface generation 2026-10-02 14:01:27 +09:00
Hare 860252c22d fix: report actual worker execution unavailability 2026-10-02 14:00:04 +09:00
Hare 539163acf3 feat: generate bounded subject memory surfaces 2026-10-02 13:25:40 +09:00
Hare 2d28c05447 chore: use 6-luna and raise compaction turn limit 2026-10-02 11:52:39 +09:00
Hare b74f1b495d Merge current develop into T-678 2026-10-02 11:31:52 +09:00
Hare 16fa3f14c9 Scope Worker resource keys by Runtime 2026-10-02 11:31:46 +09:00
Hare c631310192 Scope durable Worker identity by Runtime 2026-10-02 11:13:38 +09:00
Hare ba98a6afe6 fix: harden subject memory consolidation 2026-10-02 11:13:11 +09:00
Hare 046e606a38 feat: connect subject memory consolidation 2026-10-02 10:46:12 +09:00
Hare 2c329072a2 Replace Worker list revisions with ordered subscriptions 2026-10-02 10:41:02 +09:00
Hare 8f8c2676b4 fix: keep memory reads globally bounded 2026-10-02 09:52:32 +09:00
Hare 860c34b8da fix: bound memory read continuations 2026-10-02 09:26:53 +09:00
Hare f50a0caea9 fix: harden subject memory delivery 2026-10-02 09:05:11 +09:00
Hare 07f2b0e8a3 Merge remote-tracking branch 'origin/develop' into work/T-669-subjektiv-memory-tools 2026-10-02 07:39:25 +09:00
Hare b391392246 feat: add subject-scoped memory tools 2026-10-02 07:39:04 +09:00
Hare a0460f107d chore: upgrade frontend dependencies to SvelteKit 3 2026-10-02 07:36:25 +09:00
Hare 6d7eac940c fix(web): restore in-flight blocks through live projection 2026-10-02 07:18:58 +09:00
Hare 1f26a7f2bb fix: fence subjektiv completion side effects 2026-10-02 06:33:30 +09:00
Hare fede0fb51b chore: refresh subjektiv API artifacts 2026-10-02 06:18:02 +09:00
Hare 6e293d57cd test: cover subjektiv lifecycle boundaries 2026-10-02 06:18:02 +09:00
Hare 9a7bfba507 Merge remote-tracking branch 'origin/develop' into work/T-668-subjektiv-memory-lifecycle 2026-10-02 06:00:49 +09:00
Hare 6091fafcac feat: connect subjektiv extraction lifecycle 2026-10-02 06:00:31 +09:00
Hare d10783c0d6 fix: honor compaction cancellation and replay identity 2026-10-02 05:38:42 +09:00
Hare 88338229a1 fix: deduplicate compaction terminal failures 2026-10-02 05:30:17 +09:00
Hare d0ea9f598d fix: include idle-only input in runtime API contract 2026-10-02 03:33:30 +09:00
Hare d5f49cbf00 fix: restrict worker send input to idle admission 2026-10-02 02:39:10 +09:00
Hare 4ac448d66c fix: separate console pending groups and align row typography 2026-10-02 01:55:54 +09:00
Hare 17b7bdc769 chore: merge develop into hare/develop 2026-10-02 01:02:37 +09:00
Hare 62b0f87477 feat: integrate subjektiv revisioned memory store 2026-10-01 17:23:49 +09:00
Hare 1e59a07ea8 feat: integrate durable run transitions 2026-10-01 17:17:44 +09:00
Hare 014b948990 Add subjektiv revisioned memory store 2026-10-01 17:16:25 +09:00
Hare e43410f5e3 Fence lifecycle capture on cancelled runs 2026-10-01 17:12:02 +09:00
Hare 64ed50f6c0 Treat intentional cancellation as a non-failure terminal 2026-10-01 17:04:05 +09:00
Hare 0ec2b3ad86 Persist logical run yield and resume transitions 2026-10-01 16:44:11 +09:00
Hare 2f75176648 Fence feature operations during teardown 2026-10-01 16:37:46 +09:00
Hare 7797a65d54 Add server-managed feature SQLite storage 2026-10-01 16:27:30 +09:00
Hare f5d8c94713 fix: bind singleton retries to caller intent 2026-10-01 15:57:05 +09:00
Hare f351996d2c fix: harden singleton retries and authority 2026-10-01 15:46:18 +09:00
Hare 1afddc148d feat: enforce arbitrary worker singleton ownership 2026-10-01 15:27:05 +09:00
Hare d066f3963f fix: separate workspace settings display and editing 2026-10-01 15:14:57 +09:00
Hare 8e0dad98e8 fix: replace home navigation with work dashboard 2026-10-01 14:25:21 +09:00
Hare f742362b03 fix: capture ticket edit preimages atomically 2026-10-01 14:06:33 +09:00
Hare d101b4bacb fix: queue ticket checks with exact snapshots 2026-10-01 13:52:57 +09:00
Hare 696e6a51e7 fix: rebuild workspace home around daily navigation 2026-10-01 13:52:16 +09:00
Hare b9aaff4052 fix: synchronize sidebar pin and main layout animations 2026-10-01 13:36:19 +09:00
Hare f99da27891 fix: tighten sidebar footer spacing and inset divider 2026-10-01 13:30:22 +09:00
Hare d3c3f6f4d5 fix: exclude temporary Vitest configs from dev watcher 2026-10-01 13:23:32 +09:00
Hare 9579f3e245 feat: animate main layout and separate sidebar controls 2026-10-01 13:12:13 +09:00
Hare ab8b4ab1ef feat: check saved ticket requirements asynchronously 2026-10-01 13:06:57 +09:00
Hare 101b021c5f fix: anchor sidebar pin button at bottom left 2026-10-01 12:54:09 +09:00
Hare ee83fca95b fix: keep sidebar stationary when changing pin mode 2026-10-01 12:43:22 +09:00
Hare 5c98dbb208 feat: add pinned and hover sidebar modes 2026-10-01 12:36:39 +09:00
Hare b061ab68de Merge remote-tracking branch 'origin/work/T-674-backend-job-runner' into develop 2026-10-01 12:33:46 +09:00
Hare 63951398f0 fix durable job notification receipts 2026-10-01 12:26:30 +09:00
Hare 027a346e9d fix tracked job dispatch and delivery recovery 2026-10-01 11:58:49 +09:00
Hare 3ee1698957 feat: slide sidebar when expanding and folding 2026-10-01 11:48:50 +09:00
Hare a07d70b107 feat: persist sidebar fold preference across logins 2026-10-01 11:42:49 +09:00
Hare 213ed76061 fix backend job execution fencing and delivery 2026-10-01 11:18:14 +09:00
Hare eb4c7959a7 chore: replace GPT-6 Sol with GPT-6.1 Sol 2026-10-01 11:16:45 +09:00
Hare b5ae7dcd64 feat: animate console jump to latest button 2026-10-01 11:07:50 +09:00
Hare 1bc1f54ea0 feat: add console jump to latest icon 2026-10-01 10:59:13 +09:00
Hare 2ddf547308 fix: remove composer footer error messages 2026-10-01 10:09:52 +09:00
Hare ca838e4acf feat: add durable backend job runner 2026-10-01 10:06:55 +09:00
Hare 6b2f40a2a2 fix: isolate legacy external grants from workdir inventory 2026-09-30 14:42:29 +09:00
Hare 13f01b2495 style: apply workspace rustfmt 2026-09-30 14:28:42 +09:00
Hare 44d6d740be feat: default tool calls to early dispatch 2026-09-30 14:28:42 +09:00
Hare 3d87c3860a fix: remove overridden turn boundary line height 2026-09-30 14:16:58 +09:00
Hare 8627d45085 fix: reconcile console history before grouping activity 2026-09-30 14:16:58 +09:00
Hare cbf1b83599 fix: constrain external grep ignore ancestor matching 2026-09-30 13:58:39 +09:00
Hare 699a3c051c fix: restore centered turn navigation 2026-09-30 13:50:21 +09:00
Hare 5f8ae508fc fix: top-align turn bars and constrain history boundary 2026-09-30 13:45:45 +09:00
Hare 657cae1d4b feat: add composer completion and mini task controls 2026-09-30 13:11:28 +09:00
Hare c0fd476d8b refactor: remove worker capability summary flags 2026-09-30 13:11:28 +09:00
Hare eb222c8d62 fix: honor disabled workspace request timeouts 2026-09-30 13:10:49 +09:00
Hare 5560a88f43 fix: preserve turn anchors when prepending history 2026-09-30 12:23:27 +09:00
Hare 58c5c43061 chore: merge develop while preserving console interactions 2026-09-30 12:17:49 +09:00
Hare c73e20be17 fix(console): preserve exact adopted history boundaries 2026-09-30 11:40:45 +09:00
Hare 709f3c5530 fix(console): reconcile history around lineage anchors 2026-09-30 11:16:23 +09:00
Hare 4976b6fd00 fix(console): bound retained history reconciliation 2026-09-30 10:56:01 +09:00
Hare aa144ee6fa test: verify console history in production browser 2026-09-30 09:36:02 +09:00
Hare 6d0eaef6bc Merge remote-tracking branch 'origin/develop' into work/T-659-console-history-pagination 2026-09-30 09:20:23 +09:00
Hare 065812bc39 fix(web): cover deep document headings 2026-09-30 09:09:24 +09:00
Hare 6d5d979012 feat: add console turn navigation and pending previews 2026-09-30 09:08:04 +09:00
Hare 22c2e25c8f Merge remote-tracking branch 'origin/develop' into work/T-661-memory-document 2026-09-30 08:39:27 +09:00
Hare 717d28839d fix: exercise production CLI image provider 2026-09-30 08:32:43 +09:00
Hare 4e8a7fc118 fix: address ViewImage external review findings 2026-09-30 08:16:06 +09:00
Hare 34ed988b75 feat: page console history across compaction 2026-09-30 08:13:07 +09:00
Hare a0944f66c8 feat(web): redesign Memory document reader 2026-09-30 07:48:28 +09:00
Hare 05d6da45fb fix: add bounded binary reads for ViewImage 2026-09-30 07:44:59 +09:00
Hare 2006b390b4 fix: restore console input and attachment workflows
Restore durable busy Submit queues and TUI Enter delivery, expose Web Queue beside Notify, and separate the Composer toolbar from its editor without persistent success notices.

Support pasted image attachments and restore canonical Worker Session uploaded-file operations, including retention, binding, cleanup and authenticated upload context.

Validated Worker, Protocol and Session Store suites, 278 TUI tests, 59 Web tests and Svelte check. Runtime suite could not complete due to external Workdir transport timeouts.
2026-09-30 05:16:57 +09:00
Hare cafbb73a22 fix: refresh generated Workdir API contract 2026-09-30 02:07:24 +09:00
Hare 39ecd1b239 fix: enforce hierarchical external Workdir permissions 2026-09-30 02:01:12 +09:00
Hare 677c7cfed9 fix: accept external Workdirs in Browser subscriptions 2026-09-30 01:14:24 +09:00
Hare 5f19dcc93f fix: use browser-safe WebSocket close code 2026-09-29 15:38:12 +09:00
Hare 39b4a019c9 fix: preserve external Workdir Workers in sidebar 2026-09-29 15:29:10 +09:00
Hare 8c78e55b28 chore: format Worker command telemetry 2026-09-29 15:19:01 +09:00
Hare 60137e0aad chore: merge develop into hare/develop 2026-09-29 15:15:02 +09:00
Hare 3023a270f4 fix: isolate Worker command telemetry 2026-09-29 15:10:57 +09:00
Hare 4ffa9e418e chore: refresh generated API contract hashes 2026-09-29 14:49:13 +09:00
Hare 7a783fcf4e chore: merge current develop into T-656 2026-09-29 14:41:58 +09:00
Hare e9e0368db4 fix: preserve external command attachment authority 2026-09-29 14:41:36 +09:00
Hare 38c2a78b1c feat: integrate early tool call dispatch 2026-09-29 14:02:11 +09:00
Hare 8ff7df7edf fix: preserve response-complete stream EOF 2026-09-29 13:55:07 +09:00
Hare d81c9a8154 fix: authorize signed workers for Workdir removal 2026-09-29 13:51:03 +09:00
Hare 36295edc08 fix: require terminal stream completion 2026-09-29 13:43:36 +09:00
Hare c18e3ea0d6 fix: align Ticket review revision checks 2026-09-29 13:22:28 +09:00
Hare 4ab2a2b88a style: format merged workspace server changes 2026-09-29 13:02:16 +09:00
Hare 0440e64975 chore: merge updated develop into T-656 2026-09-29 12:59:11 +09:00
Hare 1980da2880 fix: close early dispatch recovery gaps 2026-09-29 12:37:13 +09:00
Hare dd2bc41ab8 fix: harden external command lifecycle 2026-09-29 12:03:02 +09:00
Hare dcf14ef565 fix: harden early tool call dispatch 2026-09-29 12:00:36 +09:00
Hare 8b951d53e6 feat: add external workdir command permissions 2026-09-29 11:26:25 +09:00
Hare cc2f8b3422 feat: add opt-in early tool call dispatch 2026-09-29 11:07:59 +09:00
Hare d8067c9789 fix: preserve external Workdirs in Worker projections 2026-09-29 10:22:41 +09:00
Hare 12d1d0e2d9 fix: include initial snapshot in Worker subscriptions 2026-09-29 09:01:24 +09:00
Hare 09f8cfb718 fix: reject unresolved worker console targets 2026-09-29 07:36:03 +09:00
Hare c979883463 test: align merge request review fixtures 2026-09-29 06:51:09 +09:00
Hare 21962d7a6a chore: merge develop into hare/develop 2026-09-29 06:44:40 +09:00
Hare 08cbf93f7b fix: reject unavailable retained sessions 2026-09-29 06:44:27 +09:00
Hare d1303ab638 fix: enforce complete external edit result contract 2026-09-29 06:30:05 +09:00
Hare 60e0bf1d86 fix: fence external mutation preimages and bounds 2026-09-29 06:21:03 +09:00
Hare 6cf7e57309 feat: clarify external filesystem write scope 2026-09-29 06:07:55 +09:00
Hare 73b1f97e02 feat: format incorporated runtime baseline 2026-09-29 06:04:06 +09:00
Hare 56822570f6 feat: finalize external workdir implementation formatting 2026-09-29 06:03:49 +09:00
Hare 35691071d0 feat: preserve runtime fences in workdir migration 2026-09-29 06:02:13 +09:00
Hare e96715dd56 feat: synchronize generated web contract digests 2026-09-29 05:58:52 +09:00
Hare 544204b24e feat: update external workdir generated contracts 2026-09-29 05:57:58 +09:00
Hare 00e0472807 Merge remote-tracking branch 'origin/develop' into work/T-652-external-workdir-interactive-rw 2026-09-29 05:56:28 +09:00
Hare 59f391e0cd Merge remote-tracking branch 'origin/develop' into work/T-652-external-workdir-interactive-rw 2026-09-29 05:53:39 +09:00
Hare 24be69918d feat: add interactive read-write external workdir sharing 2026-09-29 05:53:32 +09:00
Hare 59388f9c35 feat: incorporate T-653 Console baseline 2026-09-29 05:48:12 +09:00
Hare 26f1de976a feat: model Worker Console display states 2026-09-29 05:48:05 +09:00
Hare ebc98e3de5 fix: read retained sessions from canonical aggregate 2026-09-29 05:43:01 +09:00
Hare f33e737d5c fix: align browser validation with Rust wire shape 2026-09-29 05:15:59 +09:00
Hare df3251b2a0 feat: validate workspace protocol frames in browser 2026-09-29 05:02:56 +09:00
Hare 54c1174698 Allow fresh requirement review after integration 2026-09-29 02:01:27 +09:00
Hare ad08110c96 Bind ticket completion to current review evidence 2026-09-29 01:47:01 +09:00
Hare 590abf3142 Support multiple merge requests per ticket 2026-09-29 01:08:46 +09:00
Hare ac7a6027bd fix: restore backend workers from resume 2026-09-28 04:28:35 +09:00
Hare e1234e5d1c chore: merge develop into hare/develop
# Conflicts:
#	web/workspace/deno.json
#	web/workspace/src/routes/w/[workspaceId]/settings/repository-access/+page.svelte
#	web/workspace/test/repository-access/ui.test.ts
2026-09-28 03:45:13 +09:00
Hare ab63a06677 docs: align worker run lifecycle authority 2026-09-26 22:50:23 +09:00
Hare 2e5a95b842 fix: isolate restore candidate observations 2026-09-26 22:48:01 +09:00
Hare 343af9ea3c fix: reconcile worker restores by operation 2026-09-26 22:35:43 +09:00
Hare a9c7f79012 fix: journal worker stop operations 2026-09-26 22:21:53 +09:00
Hare c8cf91655e fix: journal worker restore operations 2026-09-26 22:08:07 +09:00
Hare 7df2e20cf3 fix: map uncertain runtime store commits 2026-09-26 22:08:00 +09:00
Hare 91d1b1fedd fix: make worker aggregate persistence atomic 2026-09-26 21:40:21 +09:00
Hare 4d978b8cd8 fix: separate worker observation freshness 2026-09-26 07:32:43 +09:00
Hare e3587be3bd docs: report worker lifecycle atomicity gaps 2026-09-26 07:32:36 +09:00
Hare 0aa3752bf8 fix: retry rejected automatic worker restores 2026-09-24 21:41:43 +09:00
Hare 1e4fcd170c fix: require explicit workdir command cwd 2026-09-24 20:17:19 +09:00
Hare 4c653a939f fix: scope runtime workdir attachments independently 2026-09-24 20:04:45 +09:00
Hare 0b0669b77b fix: keep current worker visible in collapsed sidebar 2026-09-24 19:58:09 +09:00
Hare 1649e1ad89 fix: restore standalone logical workspace scope 2026-09-24 19:58:03 +09:00
Hare a948c2708d fix(web): invalidate stale rotated public keys 2026-09-24 19:45:08 +09:00
Hare 54264e6e3b fix(web): fence credential lifecycle handlers 2026-09-24 19:37:25 +09:00
Hare 92fe0ab9b6 fix(web): serialize credential key actions 2026-09-24 19:28:44 +09:00
Hare 0537894768 fix(web): fence repository access route state 2026-09-24 19:13:43 +09:00
Hare bec3ed9515 chore: format merged develop changes 2026-09-24 18:48:44 +09:00
Hare ecb0989e14 merge develop into T-651 repository access UI 2026-09-24 18:44:45 +09:00
Hare d5508a7e35 fix(web): scope repository access operations 2026-09-24 18:44:23 +09:00
Hare 3cd535cc8a fix: retain repository access for workdir sessions 2026-09-24 18:37:11 +09:00
Hare 58d43af3e6 fix: align runtime attachment authorization 2026-09-24 18:37:11 +09:00
Hare e69aa03f5d feat: make image attachments request-local 2026-09-24 18:21:29 +09:00
Hare e6608dd42f fix: allow remote ticket targets without server checkout 2026-09-24 05:04:19 +09:00
Hare 70eb1120a2 fix: serve frontend deep links through SPA shell 2026-09-24 04:42:44 +09:00
Hare 75bbdfc56e fix: migrate legacy ticket target key evidence 2026-09-24 04:38:23 +09:00
Hare 3802549e48 chore: remove old .yoi directory 2026-09-24 03:51:33 +09:00
Hare 9b22dcc190 chore: merge develop into hare/develop 2026-09-24 01:01:35 +09:00
Hare 593e521e12 fix: isolate worker command telemetry 2026-09-24 00:58:02 +09:00
Hare 0baec54ae9 fix: guard manual coder target bindings 2026-09-23 23:49:31 +09:00
Hare 4c458cbf74 feat(web): redesign repository access settings 2026-09-23 23:30:28 +09:00
Hare 9ccf2fbc3b feat: support permissioned multi-repository ticket targets 2026-09-23 23:11:37 +09:00
Hare 9c107eaf74 feat(api): declare typed WebSocket operations 2026-09-23 21:07:20 +09:00
Hare ed99be3e24 fix: type runtime config and test passkey lifecycle 2026-09-23 20:15:23 +09:00
Hare 237ab0e592 feat: add typed conditional API responses 2026-09-23 19:32:05 +09:00
Hare 97822cf691 feat: add bounded binary API request bodies 2026-09-23 18:29:54 +09:00
Hare 2766e5b41b fix: enforce ServerApi as the wire authority 2026-09-23 17:27:27 +09:00
Hare f25c8d8b6d fix: preserve generated runtime request boundaries 2026-09-23 11:08:54 +09:00
Hare 515a19bbc3 feat: generate ticket browser contract from ServerApi 2026-09-23 10:51:50 +09:00
Hare 6f9dc7ab41 fix: complete generated runtime route wiring 2026-09-23 10:03:59 +09:00
Hare 89024d3b01 feat: migrate workspace worker and companion domains to ServerApi 2026-09-23 10:00:56 +09:00
Hare ad12d77ad4 feat: migrate runtime worker domains to ServerApi 2026-09-23 08:24:39 +09:00
Hare 7a975765ac feat: migrate repository and workdir domains to ServerApi 2026-09-23 06:51:05 +09:00
Hare 6d65d50ec1 feat: migrate ticket and objective domains to ServerApi 2026-09-23 05:42:50 +09:00
Hare 6c53854f9b feat: add GPT-6 Sol and Luna to model catalog 2026-09-23 04:55:38 +09:00
Hare 6cbc3a6988 feat: migrate workspace configuration domains to ServerApi 2026-09-23 04:27:52 +09:00
Hare 7905ea4054 fix: grant default repository credential write access 2026-09-23 02:57:48 +09:00
Hare c8766e9fb9 feat: migrate auth and workspace catalog to ServerApi 2026-09-23 02:40:51 +09:00
Hare 91f356698b chore: merge develop into hare/develop 2026-09-23 01:40:55 +09:00
Hare 327d2189c9 docs: report live Svelte validation route churn 2026-09-23 01:29:31 +09:00
Hare bd3cc65e19 fix: fence shared chrome overrides by route 2026-09-23 01:29:21 +09:00
Hare 9857bf04f7 fix: require idle workers for submit 2026-09-23 00:36:54 +09:00
Hare 10b3740696 docs: record final authority validation 2026-09-22 23:57:37 +09:00
Hare f18eef4766 docs: finalize authority removal audit 2026-09-22 23:45:50 +09:00
Hare 617c56bd85 Merge remote-tracking branch 'origin/develop' into work/T-452-remove-repository-local-yoi 2026-09-22 23:41:17 +09:00
Hare a689072756 fix(e2e): close worker environment review gaps 2026-09-22 23:28:28 +09:00
Hare d8444e49bd fix: render compaction activity in web console 2026-09-22 22:57:44 +09:00
Hare 0219cb1d32 test: align symlink listing with resolved scope 2026-09-22 22:52:51 +09:00
Hare 5fb3cb20cd refactor: remove repository-local yoi authority 2026-09-22 22:52:41 +09:00
Hare 0869ef0cc6 test(e2e): isolate worker server runtime environments 2026-09-22 22:26:02 +09:00
Hare 043cb7bf22 fix: confine external glob ignore handling 2026-09-22 19:07:28 +09:00
Hare 757432dac4 fix: close external workdir review gaps 2026-09-22 18:57:47 +09:00
Hare b5ee6b5804 fix: harden external workdir lifecycle 2026-09-22 07:56:20 +09:00
Hare ce9534f3a2 feat: add client-hosted external workdirs 2026-09-22 06:49:15 +09:00
Hare dc135ee1de Merge branch 'develop' into hare/develop 2026-09-22 03:01:55 +09:00
Hare e7ebfdb964 chore: add rustfmt to devshell 2026-09-22 02:35:42 +09:00
Hare aa41250beb fix: decouple workdir attachments from materialization 2026-09-22 02:35:42 +09:00
Hare 2cdc35f3e2 fix: allow singleton worker deletion 2026-09-22 00:42:41 +09:00
Hare 67b7b2cb80 test(workspace-web): cover workdir label edge cases 2026-09-21 23:02:40 +09:00
Hare e085814502 chore: refresh T-642 onto current develop 2026-09-21 22:59:43 +09:00
Hare d7240470d1 fix: avoid unsupported workdir subscription 2026-09-21 22:52:19 +09:00
Hare 8e6bd1be5c feat: show worker workdirs as repo branches 2026-09-21 22:23:15 +09:00
Hare 769a3398fa test(workspace-server): exercise remote spawn HTTP boundary 2026-09-21 20:14:21 +09:00
Hare 36e9ee5060 test(workspace-server): cover guarded attachment spawn 2026-09-21 20:02:24 +09:00
Hare 3194729038 fix: use workdir attachments for coder spawn 2026-09-21 17:50:26 +09:00
Hare 5525640ef6 test: align no-workdir routed tool contract 2026-09-21 04:35:52 +09:00
Hare 14d21c4642 feat: merge develop into hare/develop 2026-09-21 04:30:02 +09:00
Hare 0df9913286 feat: integrate multi-workdir tool routing 2026-09-20 22:17:38 +09:00
Hare 74fbadb1cd fix: complete multi-workdir isolation and launch UI 2026-09-20 22:07:59 +09:00
Hare c102119412 feat: route tools across workdir attachments 2026-09-20 19:38:20 +09:00
Hare 4e7f48a389 fix: integrate post-compact usage boundary 2026-09-20 19:36:48 +09:00
Hare b2ddab6d7e fix: fence pending usage across segment forks 2026-09-20 19:31:45 +09:00
Hare 2dda4b90b4 fix: preserve pending usage across pause and compact 2026-09-20 19:17:33 +09:00
Hare cd648a9abd fix: persist post-compact usage at request boundary 2026-09-20 18:57:11 +09:00
Hare c492cd9a94 feat: integrate multiple workdir attachments
# Conflicts:
#	crates/workspace-server/src/server.rs
2026-09-20 18:48:15 +09:00
Hare 904304f1fb fix: complete worker spawn compensation 2026-09-20 18:31:56 +09:00
Hare 37df3ec545 feat: support multiple worker workdir attachments 2026-09-19 23:27:57 +09:00
Hare 0c80f84e9c fix(workspace-server): fence cleanup removal races 2026-09-19 01:53:22 +09:00
Hare b272bc37e8 fix(workspace-server): make worker removal catalog commits atomic 2026-09-19 01:34:19 +09:00
Hare 5503b9b977 fix: allow cross-runtime workdir projection 2026-09-18 23:29:10 +09:00
Hare 308ae19f5e fix: restore sidebar workdir projection 2026-09-18 22:05:00 +09:00
Hare e3034e4465 Merge branch 'work/T-572-workspace-web-ux-demo' into hare/develop 2026-09-18 21:40:03 +09:00
Hare b06e2860ca feat: merge develop into hare/develop 2026-09-18 21:36:04 +09:00
Hare fba12b89bc fix: fail closed on lossy Repository schemas 2026-09-18 21:02:37 +09:00
Hare b0ad3689d0 fix(repository-api): reject overlapping oneof literals 2026-09-18 20:53:48 +09:00
Hare e6d3905dc6 fix(repository-api): preserve optional fields and schema combinations 2026-09-18 20:44:45 +09:00
Hare 8ba89e7cee fix(repository-api): reject unsupported schema keywords 2026-09-18 20:32:44 +09:00
Hare f558ca9b1f feat: generate Repository frontend types from OpenAPI 2026-09-18 20:26:20 +09:00
Hare ca305f0ff1 fix(repository-api): validate operation reference siblings 2026-09-18 20:16:20 +09:00
Hare 9588b1e2c8 fix(repository-api): reject lossy schemas and revision ranges 2026-09-18 20:10:52 +09:00
Hare 50ba3ab2d5 feat(workspace): generate repository API contracts from OpenAPI 2026-09-18 20:01:53 +09:00
Hare f0114a0390 fix: make compaction Segment activation fail closed 2026-09-18 19:45:12 +09:00
Hare d7917512ac feat: make tool result pruning opt-in 2026-09-18 19:43:29 +09:00
Hare 57fa8f6c76 fix: apply rustfmt to T-620 changes 2026-09-18 19:35:04 +09:00
Hare 8435236862 feat: migrate Repository REST to generated Server API 2026-09-18 19:30:32 +09:00
Hare 79bafa2a64 fix: align sidebar worker action spacing 2026-09-18 19:30:29 +09:00
Hare 19ee757880 feat: configure role-specific models 2026-09-18 19:22:37 +09:00
Hare 72f0b82ae5 worker: persist child completion before wakeup 2026-09-18 19:12:55 +09:00
Hare 852a405182 Normalize deleting-workspace repository conflicts 2026-09-18 19:12:42 +09:00
Hare cc06b41322 fix: skip stopped worker live protocol subscriptions 2026-09-18 19:04:52 +09:00
Hare 19b04a8d8f worker: verify completion durability on shutdown 2026-09-18 18:58:05 +09:00
Hare 7a4a988208 Document media type and deletion conflicts 2026-09-18 18:56:06 +09:00
Hare ceecbbfe6f test(workspace): cover partial streaming links 2026-09-18 18:54:26 +09:00
Hare 72a61e4952 worker: persist compaction-time notifications 2026-09-18 18:53:47 +09:00
Hare d1161bd1b5 test(workspace): preserve markdown compatibility boundaries 2026-09-18 18:50:57 +09:00
Hare bbd949e57f Digest rendered OpenAPI contract 2026-09-18 18:37:55 +09:00
Hare 092aea62d2 fix(workspace): stream incremental markdown rendering 2026-09-18 18:35:51 +09:00
Hare d59879cc4b worker: cover activation race boundaries 2026-09-18 18:35:38 +09:00
Hare 103fee0ba4 Complete repository contract error coverage 2026-09-18 18:34:29 +09:00
Hare d1d391e511 worker: exercise activation recovery faults 2026-09-18 18:15:33 +09:00
Hare 6214e88fac worker: test activation fault recovery 2026-09-18 17:52:06 +09:00
Hare 986540411e feat: merge workspace web UX demo 2026-09-18 17:41:10 +09:00
Hare 82c191d637 Route repository aliases through ServerApi 2026-09-18 17:35:27 +09:00
Hare ff87ccf855 worker: harden activation recovery 2026-09-18 17:26:39 +09:00
Hare 91f6589e1f Cover generated repository client request 2026-09-18 17:23:27 +09:00
Hare 8ef7c8e854 Update ServerApi metadata coverage 2026-09-18 17:20:26 +09:00
Hare 8dbc1629ff fix: enforce workspace typography scale 2026-09-18 17:20:16 +09:00
Hare e12b555f43 Migrate repository routes to ServerApi 2026-09-18 17:17:02 +09:00
Hare 1b153ba144 feat: unify frontend Worker registry projection 2026-09-18 16:46:32 +09:00
Hare b62b7c8f2d worker: await cleanup on automatic shutdown 2026-09-18 16:45:40 +09:00
Hare 103ef40f57 worker: fence controller during repair 2026-09-18 06:55:23 +09:00
Hare 7551576b08 fix(protocol): export worker availability binding 2026-09-18 06:53:16 +09:00
Hare e7c50dc519 worker: keep cleanup failures non-idle 2026-09-18 06:40:46 +09:00
Hare 179bf60e9f fix(workspace): preserve worker projection convergence 2026-09-18 06:40:12 +09:00
Hare bd07f3a66f refactor: rename Workspace API crate to server API 2026-09-18 06:35:33 +09:00
Hare fc24cb672e worker: retain failed activation authority 2026-09-18 06:27:11 +09:00
Hare c6cb038683 refactor(api): rename workspace-api authority to server-api
Absorb the Server HTTP DTO catalog and generators into server-api, remove the obsolete workspace-api package/path, preserve the separate runtime transport authority through explicit boundary DTO conversions, and rename the aggregate frontend projection as a bounded legacy artifact.
2026-09-18 06:21:46 +09:00
Hare 95636b3d53 feat(workspace): persist runtime worker projection 2026-09-18 06:20:09 +09:00
Hare 34085b121d worker: make segment activation atomic 2026-09-18 06:08:35 +09:00
Hare 991adc2fa1 feat: generate OpenAPI from API contracts 2026-09-18 06:05:11 +09:00
Hare 648421e454 feat(api): project bearer authorization into OpenAPI 2026-09-18 05:54:41 +09:00
Hare 9566ad3482 feat: add retained Worker session observation 2026-09-18 05:53:53 +09:00
Hare f32b354f9b fix(api): close OpenAPI schema fidelity gaps 2026-09-18 05:43:43 +09:00
Hare 9d8f294d75 fix: import generated worker summary type 2026-09-18 05:41:12 +09:00
Hare f513cfca10 feat(api): generate deterministic OpenAPI 3.1 contracts 2026-09-18 05:29:13 +09:00
Hare 195aeb69be fix: format notification batching changes 2026-09-18 05:27:21 +09:00
Hare 0d2b3152b1 Keep notifications queued while paused 2026-09-18 05:19:46 +09:00
Hare 96e04bbc32 fix: preserve auth and response bounds for session reads 2026-09-18 05:16:20 +09:00
Hare 9cde75b70f Make notifications realtime and coalesced 2026-09-18 05:04:47 +09:00
Hare 74981f8217 fix: harden retained session observation 2026-09-18 04:59:05 +09:00
Hare 7a61a26670 feat: observe retained worker sessions without restore 2026-09-18 04:27:38 +09:00
Hare 520c2f70c8 fix: simplify workspace borders and design rules 2026-09-18 04:25:39 +09:00
Hare ae7f0f0446 refactor: migrate Runtime Worker REST to generated API 2026-09-18 03:08:37 +09:00
Hare 7aef6f094e Strengthen runtime route authority regression tests 2026-09-18 02:53:36 +09:00
Hare 6baa313684 Unify manual route inventory and retention semantics 2026-09-18 02:47:05 +09:00
Hare f967c1b392 Close runtime contract acceptance gaps 2026-09-18 02:31:37 +09:00
Hare fbdb6ccc22 Address runtime API review findings 2026-09-18 02:11:20 +09:00
Hare d837684a33 Complete runtime API coverage and roundtrip proof 2026-09-18 01:38:50 +09:00
Hare 5038033c3a Migrate runtime management REST to generated API 2026-09-18 01:20:03 +09:00
Hare 7a2834c95c feat: harden Worker restore reconciliation 2026-09-18 01:16:05 +09:00
Hare bd47d064b5 fix: apply rustfmt to restore transaction changes 2026-09-18 01:12:38 +09:00
Hare 20dfc168d5 Preflight persisted restore resources 2026-09-18 01:02:32 +09:00
Hare 0d86ae66ad Harden restore preflight and retry reconciliation 2026-09-18 00:48:56 +09:00
Hare fd5199e8bd fix: show Web compacting status for tagged Worker states 2026-09-18 00:31:43 +09:00
Hare ecc0602f53 test(web): cover compacting status presentation 2026-09-18 00:26:40 +09:00
Hare 68c59afbe7 Preserve restore subscription and cleanup evidence 2026-09-18 00:25:56 +09:00
Hare 6d9c9cdb48 fix(web): gate compaction status by worker state 2026-09-18 00:14:34 +09:00
Hare 8ac8b2d50c Document missing rustfmt validation tool 2026-09-18 00:08:08 +09:00
Hare 1d7cd9339c Implement transactional Worker restore outcomes 2026-09-18 00:08:00 +09:00
Hare 01f5c560c7 feat(api): generate reqwest and axum adapters 2026-09-18 00:01:41 +09:00
Hare 01bddf2177 feat: add API operation metadata contract 2026-09-17 23:32:50 +09:00
Hare 019ab57e8f fix: make operation marker naming total 2026-09-17 23:28:20 +09:00
Hare 633f43530c fix: harden API macro expansion hygiene 2026-09-17 23:21:18 +09:00
Hare 9590cf332d feat: add shared API operation metadata macro 2026-09-17 23:05:11 +09:00
Hare 5ae1bab4ee Improve Objective list and detail display 2026-09-17 22:51:07 +09:00
Hare 063748c7ff fix: default runtime workers to in-process transport 2026-09-17 22:31:59 +09:00
Hare 86b2a5fd81 fix: make zero-input workers durably restorable 2026-09-17 21:36:17 +09:00
Hare e722d21d98 fix: log sanitized worker spawn failures 2026-09-17 19:37:07 +09:00
Hare f4b34a289e fix: archive orphaned workers during migration 2026-09-17 05:12:47 +09:00
Hare a4aeb6e7d3 fix: preserve schema 6 runtime migration path 2026-09-17 05:01:53 +09:00
Hare 96592b1a24 fix: project Worker delete persistence diagnostics 2026-09-17 04:16:33 +09:00
Hare d70dee77a9 fix: retain Worker identity after delete persistence failure 2026-09-17 04:13:45 +09:00
Hare 272cd1bb03 feat: refine workspace bevel hierarchy 2026-09-17 04:09:12 +09:00
Hare 1402240ef0 Merge remote-tracking branch 'refs/remotes/origin/develop' into work/T-612-persisted-worker-identity 2026-09-17 03:54:59 +09:00
Hare decd1311cb fix: recover interrupted Runtime store migrations 2026-09-17 03:47:26 +09:00
Hare c4622e9e3a refactor: separate Worker identity from execution state 2026-09-17 03:25:40 +09:00
Hare 360387c986 fix: classify file content conflicts as retryable 2026-09-17 02:54:37 +09:00
Hare bc0342b03e fix: discard legacy top-level run generation 2026-09-17 02:07:55 +09:00
Hare 10ebac142e refactor: make worker state snapshots authoritative 2026-09-17 02:02:51 +09:00
Hare d124b03fc8 chore: preserve markdown prose wrapping 2026-09-17 01:32:00 +09:00
Hare ab6450b9fe feat: establish workspace web design language 2026-09-17 01:31:54 +09:00
Hare d6bef5d1c7 fix: address lifecycle review findings 2026-09-17 00:36:08 +09:00
Hare 9d8e0114f5 fix: serialize runtime worker lifecycle 2026-09-17 00:14:33 +09:00
Hare 93070a3a93 fix(runtime): reject duplicate removal revisions 2026-09-16 21:04:30 +09:00
Hare d1b94625b1 fix(runtime): fence removed internal worker activity 2026-09-16 20:57:17 +09:00
Hare fbbea1bf91 fix: scope compaction suppression to one run 2026-09-16 07:27:21 +09:00
Hare a0f8ee51a4 fix: guard automatic compaction retries 2026-09-16 07:16:31 +09:00
Hare ffc1933f06 fix: separate compaction metric correlation 2026-09-16 06:34:15 +09:00
Hare b6960878a6 fix: align compaction metric schema 2026-09-16 06:24:45 +09:00
Hare fef3b6f4a0 fix: preserve compaction metric precision and CAS category 2026-09-16 06:13:32 +09:00
Hare c0a73c12ec feat: record compaction lifecycle metrics 2026-09-16 06:01:04 +09:00
Hare f40714efc2 feat: add explicit session metrics export 2026-09-16 06:00:57 +09:00
Hare 07ed908ae6 test: cover compaction restart boundaries 2026-09-16 05:14:16 +09:00
Hare cfe772ea7d fix: fence compaction commit and status 2026-09-16 04:58:38 +09:00
Hare c0fe20e8a2 fix: serialize compaction pointer commits 2026-09-16 04:41:27 +09:00
Hare df22526a0d fix: render compaction on worker status 2026-09-16 04:25:37 +09:00
Hare 1d06d4b08a fix: keep compaction lifecycle runtime-only 2026-09-16 04:19:02 +09:00
Hare 4e7a314a00 fix: make compaction activation atomic 2026-09-16 03:44:48 +09:00
Hare c8eb767d63 doc: rewrite design doc 2026-09-15 12:51:39 +09:00
Hare 016dbd7cb1 fix: preserve worker run generations across restore 2026-09-15 01:17:30 +09:00
Hare 7210d3c202 fix: reject failed worker restores before attach 2026-09-15 00:47:12 +09:00
Hare 572204b49a fix: resolve CLI connections before async runtime 2026-09-15 00:28:25 +09:00
Hare 86dd67a24c fix: skip stopped worker protocol subscriptions 2026-09-14 23:31:14 +09:00
Hare beeba1fdfc fix: migrate legacy worker snapshots 2026-09-14 22:28:01 +09:00
Hare 41b7b289d0 fix: serialize Workdir lease admission with writes 2026-09-14 20:32:21 +09:00
Hare 24237249d1 Merge remote-tracking branch 'origin/develop' into work/T-604-workdir-symlink-policy 2026-09-14 20:05:34 +09:00
Hare e448073b98 fix: fence resolved Workdir lease aliases 2026-09-14 20:05:27 +09:00
Hare c08152d069 fix: share workspace creation wire contract 2026-09-14 19:45:18 +09:00
Hare 3995561220 Merge remote-tracking branch 'refs/remotes/origin/develop' into work/T-468-remove-local-workspace-authority 2026-09-14 19:26:44 +09:00
Hare aea51caeb4 fix: resolve workspaces through backend repositories 2026-09-14 19:24:44 +09:00
Hare 3eca380bd8 Merge remote-tracking branch 'origin/develop' into work/T-604-workdir-symlink-policy 2026-09-14 19:12:17 +09:00
Hare 8a3e06bc81 feat: add selective Workdir symlink policies 2026-09-14 19:09:12 +09:00
Hare c4274c42cb fix: align plugin help with offline commands 2026-09-14 18:52:00 +09:00
Hare a61ad15767 refactor: remove ambient plugin authority 2026-09-14 18:40:42 +09:00
Hare 7f1e374fd7 fix: remove repository-local workspace selection 2026-09-14 18:31:04 +09:00
Hare e3f5445a02 fix: move workspace metadata authority to server database 2026-09-14 18:31:04 +09:00
Hare d2cb50d081 fix: fence runtime removal races and retries 2026-09-13 02:54:01 +09:00
Hare 6c609808c9 fix: use authoritative runtime removal result 2026-09-13 02:30:24 +09:00
Hare 2d4c7b383a feat: add guarded runtime removal operation 2026-09-13 02:30:15 +09:00
Hare c21ed7dff2 fix: preserve credential candidates across Workdir retries 2026-09-13 01:24:26 +09:00
Hare 448e392a0e fix: persist Workdir credential candidate snapshots 2026-09-13 01:14:39 +09:00
Hare d97c40d6af fix: reject plain HTTP repository sources 2026-09-13 01:12:01 +09:00
Hare 2d512b6be6 fix: remove stale HTTP repository access branch 2026-09-13 01:04:46 +09:00
Hare f061a95b48 fix: validate repository URI before source kind 2026-09-13 00:45:43 +09:00
Hare eefdef1bef fix: lock verified runtime public keys 2026-09-13 00:32:44 +09:00
Hare 7675f81999 fix: reject plain HTTP repository sources 2026-09-13 00:29:16 +09:00
Hare 8fb592071f fix: fence stale repository SSH probes 2026-09-13 00:27:32 +09:00
Hare 2528312142 fix: lock verified Runtime public keys in settings 2026-09-13 00:23:25 +09:00
Hare 08d7965ea8 fix: centralize repository access expiry 2026-09-13 00:20:25 +09:00
Hare e0badad91f fix: invalidate stale repository SSH probes 2026-09-13 00:17:12 +09:00
Hare f0a91ce2d8 fix: centralize repository access expiry 2026-09-13 00:11:03 +09:00
Hare 24cab83f48 test: cover repository credential rotate visibility 2026-09-13 00:05:14 +09:00
Hare 33a2b5d702 fix: unify workspace request routing 2026-09-12 23:49:13 +09:00
Hare 7f807004ad Update AGENTS.md 2026-09-12 22:47:35 +09:00
Hare 5564425488 fix: retry retained workdir removal 2026-09-12 13:30:25 +09:00
Hare 4a89c04732 fix: allow corrupted workdir removal 2026-09-12 01:43:37 +09:00
Hare ec5a403ec6 feat: replace linked worktrees with runtime clones 2026-09-12 01:43:21 +09:00
Hare f6ce1df766 feat: support workspace-managed SSH repository access 2026-09-11 22:55:06 +09:00
Hare 9d7ddcc04a fix: enforce Workspace Runtime binding lifecycle 2026-09-09 13:20:00 +09:00
Hare 3df611636b feat: complete Workspace Runtime management flow 2026-09-09 09:38:26 +09:00
Hare d0999326bd fix: use Backend audience for embedded Runtime requests 2026-09-09 09:38:26 +09:00
Hare 6fbc65476c fix: migrate standalone Worker manifest snapshots 2026-09-09 01:22:59 +09:00
Hare fcc7d79d80 feat: authorize scoped symlink paths lexically 2026-09-09 00:51:21 +09:00
Hare 18fd6a1f5e fix: restore remote Runtime management contracts 2026-09-09 00:26:04 +09:00
Hare a072562034 chore: merge develop into hare/develop 2026-09-08 13:04:10 +09:00
Hare 2b4a2bc688 fix: fail closed on missing workspace capability 2026-09-08 12:40:04 +09:00
Hare 3344d9f8b2 refactor: remove server-global runtime trust 2026-09-08 12:19:39 +09:00
Hare fae36d220d fix: complete Runtime verification cutover 2026-09-08 10:11:18 +09:00
Hare 7b6a84a550 feat: project Runtime verification state 2026-09-08 09:22:44 +09:00
Hare f29c343879 feat: verify Workspace-signed Runtime bindings 2026-09-08 08:13:58 +09:00
Hare f5e9f49a13 fix: bind Runtime WebSockets to egress policy 2026-09-08 05:29:53 +09:00
Hare 73a35599d2 fix: complete configured Runtime onboarding 2026-09-08 05:15:14 +09:00
Hare 5080d7860e fix: preserve Runtime binding trust boundaries 2026-09-08 04:54:23 +09:00
Hare 7fb1d4056c feat: add manual Runtime trust setup UI 2026-09-08 04:22:45 +09:00
Hare 243a081874 feat: add configured Workspace Runtime bindings 2026-09-08 04:22:32 +09:00
Hare 04924cf796 fix: bound Runtime issuer trust surfaces 2026-09-08 02:31:58 +09:00
Hare 8f0917b8bc docs: remove obsolete local profile override guidance 2026-09-08 02:13:26 +09:00
Hare d4ad46127a feat: add GPT-6 Astra model catalog entry 2026-09-08 02:13:26 +09:00
Hare fba5ecf54c fix: harden Workspace issuer bootstrap 2026-09-08 02:00:19 +09:00
Hare e035df9e7b feat: add Runtime Workspace issuer trust 2026-09-08 01:54:10 +09:00
Hare 3baf0b6358 feat: integrate Workspace signing identity authority 2026-09-08 00:48:45 +09:00
Hare 4de04e42b5 fix: harden identity publication recovery 2026-09-08 00:30:38 +09:00
Hare ebec98a14c feat: add Workspace signing identity authority 2026-09-07 23:52:20 +09:00
Hare f966470d33 fix: acknowledge durable submissions before run preparation 2026-09-07 21:38:19 +09:00
Hare c76ede2ab4 fix: allow slow initial input commits 2026-09-07 20:21:22 +09:00
Hare 2fd043b634 fix: expand worker creation timeout budgets 2026-09-07 19:43:26 +09:00
Hare fb6bbe9145 fix: wait for worker shutdown before deletion 2026-09-07 19:31:32 +09:00
Hare d1585d7483 fix: route worker failure logs through tracing 2026-09-07 18:14:07 +09:00
Hare 13d853217d fix: log failed worker creations to stdout 2026-09-07 04:56:54 +09:00
Hare cc27d57e4a fix: reclaim failed worker creations 2026-09-07 04:44:19 +09:00
Hare f5c5ea5a0b fix: route worker consoles through logical resources 2026-09-07 03:53:34 +09:00
Hare f1baea1705 feat: distribute latest workspace config to runtimes 2026-09-07 02:40:03 +09:00
Hare 31f7d39647 feat: add Server database migration command 2026-09-06 16:17:48 +09:00
Hare c5a834bfd2 fix: restore composable Workspace schema migrations 2026-09-06 16:17:40 +09:00
Hare 1eef9b75ee Merge branch 'develop' into hare/develop 2026-09-06 13:39:37 +09:00
Hare ba9c885f52 feat: integrate Worker state authority 2026-09-06 11:00:00 +09:00
Hare 88683a8d8f test: provide authoritative websocket snapshot 2026-09-06 10:41:20 +09:00
Hare 0c48c5dee3 fix: fail closed without worker snapshots 2026-09-06 10:33:45 +09:00
Hare 101a0acb6b fix: terminalize removed worker reservations 2026-09-06 10:32:45 +09:00
Hare 2d1956b653 fix: separate worker state from runtime lifecycle 2026-09-06 10:05:54 +09:00
Hare b7bba8b53a fix: preserve workspace deletion checkpoints 2026-09-06 10:02:18 +09:00
Hare 7b25b767f8 fix: checkpoint workspace cleanup children 2026-09-06 09:35:44 +09:00
Hare 4631b95144 fix: fence workspace deletion side effects 2026-09-06 09:21:37 +09:00
Hare 38627c498b fix: harden workspace deletion recovery 2026-09-06 08:57:54 +09:00
Hare 282a8d31b5 fix: enforce monotonic worker state projection 2026-09-06 07:56:25 +09:00
Hare ab4fb4c1ee fix: enforce workspace deletion blockers 2026-09-06 07:54:52 +09:00
Hare e3e9e83bc1 feat: add guarded workspace deletion workflow 2026-09-06 07:22:33 +09:00
Hare 4269ebec04 chore: merge develop into worker state snapshot 2026-09-06 07:17:40 +09:00
Hare e8b9adcde4 feat: add revisioned worker execution state 2026-09-06 06:54:29 +09:00
Hare 668a9062b3 fix: fence runtime detail route state 2026-09-06 06:11:23 +09:00
Hare 5fd2ccf084 fix: gate runtime key reveal and revoke confirmation 2026-09-06 05:50:29 +09:00
Hare 5686bbc9fd fix: preview runtime trust rotation fingerprint 2026-09-06 05:25:03 +09:00
Hare 2cd57a32b2 fix: align runtime trust schema and built-in controls 2026-09-06 05:17:27 +09:00
Hare 89f4f99622 Merge branch 'develop' into work/T-595-runtime-trust-key-management
# Conflicts:
#	web/workspace/deno.json
2026-09-06 05:07:26 +09:00
Hare 78d571ed14 feat: add workspace runtime trust key management 2026-09-06 05:06:37 +09:00
Hare e5332f4a7f feat: route SubWorker workdir execution through parent 2026-09-06 04:28:52 +09:00
Hare 3ed1545c3c feat: integrate worker submit queue 2026-09-06 04:24:07 +09:00
Hare 9da20d15da fix: compose passive notify with queued submit 2026-09-06 04:15:30 +09:00
Hare 052d60bd7d fix: fence late command events and spawn rollback 2026-09-06 04:10:23 +09:00
Hare 2456d6fda5 fix: preserve pending activation order on restore 2026-09-06 04:00:02 +09:00
Hare e7803d1aba fix: qualify runtime binding helper 2026-09-06 03:52:42 +09:00
Hare ca5fddf89b fix: fence recursive SubWorker shutdown 2026-09-06 03:48:54 +09:00
Hare 88fad3893e Merge commit '5e9f7a7dc3d1169118412376f16b72850aab63f2' into work/T-593-workspace-runtime-bindings
# Conflicts:
#	crates/workspace-server/src/server.rs
2026-09-06 03:46:09 +09:00
Hare 82f9b0e48c chore: merge current develop into T-588 2026-09-06 03:45:30 +09:00
Hare ddb4c1454d fix: enable running composer delivery 2026-09-06 03:32:23 +09:00
Hare 7b1cf854f2 fix: serialize scoped command teardown 2026-09-06 03:29:50 +09:00
Hare 51c6d7f835 fix: require authenticated runtime bindings 2026-09-06 03:28:19 +09:00
Hare 9d55ce0a87 fix: reconcile interrupted upload pins 2026-09-06 03:15:44 +09:00
Hare 0f8d61188a fix: order SubWorker cleanup before Workdir release 2026-09-06 03:12:55 +09:00
Hare 7363dffb9d fix: gate runtime projection broadcasts 2026-09-06 03:00:36 +09:00
Hare 8e4b7deaa4 fix: preserve authenticated submit source 2026-09-06 02:56:51 +09:00
Hare ec845cbc25 fix: fence revoked runtime bindings 2026-09-06 02:52:15 +09:00
Hare e7079e223f fix: close scoped SubWorker command authority 2026-09-06 02:37:13 +09:00
Hare dea5bd581d fix: secure submit activation handoff 2026-09-06 02:31:10 +09:00
Hare 75b85b46d1 feat: scope runtime bindings by workspace 2026-09-06 02:30:13 +09:00
Hare 68f00bc948 refactor: broker SubWorker Workdir tools through parent 2026-09-06 02:17:44 +09:00
Hare 5e9f7a7dc3 feat: add versioned runtime connection ping 2026-09-06 02:17:26 +09:00
Hare b038f022d3 fix: harden submit queue durability 2026-09-06 01:35:26 +09:00
Hare cf7515fb35 fix: keep tool overview neutral on failures 2026-09-06 01:20:39 +09:00
Hare bb4c1dfe4f docs: update flow submit protocol example 2026-09-05 23:25:25 +09:00
Hare 72b56964c3 chore: refresh T-588 onto develop 2026-09-05 23:19:52 +09:00
Hare 5b0a6691f8 fix: fence pending queue controls 2026-09-05 23:16:19 +09:00
Hare 1239c638a5 Merge branch 'develop' into hare/develop 2026-09-05 22:39:57 +09:00
Hare d2fa0787d8 fix: retain child-local bash output scope 2026-09-05 22:29:19 +09:00
Hare a7056702e8 fix: keep worker-host paths out of remote delegations 2026-09-05 22:18:46 +09:00
Hare bb56283063 feat: persist worker submit activation queue 2026-09-05 22:06:59 +09:00
Hare 130ef1f0fe fix: align Backend worker picker columns 2026-09-05 21:19:18 +09:00
Hare 724205b1df feat: create Backend workers from bare TUI launch 2026-09-05 21:19:12 +09:00
Hare 69824ea45d fix: defer resident Memory loading until first run 2026-09-05 07:52:47 +09:00
Hare 15bc299987 fix: align integrated validation contracts 2026-09-05 06:49:06 +09:00
Hare 87bdb0c6ed chore: integrate develop into hare/develop candidate 2026-09-05 04:15:47 +09:00
Hare aa96bbedbc fix: harden Memory restore and scheduling 2026-09-05 00:24:00 +09:00
Hare 4df277c81f fix: preserve Memory consolidation enablement 2026-09-04 23:53:59 +09:00
Hare 12646b6ca0 refactor: install Memory prompt contributions through Feature 2026-09-04 23:40:12 +09:00
Hare 1e674d70c2 refactor: unify Memory feature configuration authority 2026-09-04 22:55:37 +09:00
Hare 5ee77698db fix: gate workspace memory lifecycle authority 2026-09-04 20:53:27 +09:00
Hare d1f5661881 test: cover memory lifecycle outcomes 2026-09-04 20:11:29 +09:00
Hare 532d078720 test: exercise memory lifecycle background behavior 2026-09-04 19:41:04 +09:00
Hare 27e5df106f fix: complete memory lifecycle feature boundaries 2026-09-04 19:16:01 +09:00
Hare 33d98868c3 refactor: move memory extraction into lifecycle feature 2026-09-04 18:44:50 +09:00
Hare fb13e53cb5 test: cover start race at rewrite barrier 2026-09-04 16:53:35 +09:00
Hare 60a5495ccd fix: hold feature task barrier across rewrites 2026-09-04 16:34:15 +09:00
Hare f1dc90621c fix: fence feature task shutdown races 2026-09-04 16:13:35 +09:00
Hare eecb116709 fix: bound feature lifecycle execution 2026-09-04 16:04:10 +09:00
Hare 783d25b1c4 fix: project ticket blockers from current DTO shape 2026-09-04 15:47:11 +09:00
Hare af06eecfd0 feat: add executable feature lifecycle hooks 2026-09-04 14:50:44 +09:00
Hare 9bd08a3a5b fix: bound Skill API response handling 2026-09-04 13:55:13 +09:00
Hare 3d66247e11 test: include Skill API contract suite 2026-09-04 13:36:36 +09:00
Hare 4390554477 feat: share Skill REST DTO authority 2026-09-04 13:30:39 +09:00
Hare 74457db4eb Merge commit '89856eb7c3dd6b659ff952d7e3be4a8c0885bf98' into work/T-584-agen-typed-interceptor 2026-09-04 13:01:55 +09:00
Hare 5d61da481b fix: consume internal tool batch cancellation 2026-09-04 13:01:37 +09:00
Hare 89856eb7c3 chore: replace legacy SQLite migrations with baselines 2026-09-04 12:48:45 +09:00
Hare 64c268582d fix: keep runtime SSH sockets below path limits 2026-09-04 12:48:25 +09:00
Hare bb6558e7bf fix: log Worker execution restore failures 2026-09-04 12:48:15 +09:00
Hare 42d109cae3 Merge commit '4ca8ea1694d88db501c48dd4947fdbd6f2828136' into work/T-584-agen-typed-interceptor 2026-09-04 12:28:30 +09:00
Hare 9b48b1ff5d fix: terminalize parallel tool siblings on interceptor stop 2026-09-04 12:27:59 +09:00
Hare 4ca8ea1694 feat: merge REST DTO updates from develop 2026-09-03 19:09:12 +09:00
Hare c10d6c6914 fix: keep Cargo artifacts local to workdirs 2026-09-03 19:06:57 +09:00
Hare 3a94c845cf fix: harden auth response validation 2026-09-03 18:08:43 +09:00
Hare bc810beb3b feat: centralize auth REST contracts 2026-09-03 17:35:24 +09:00
Hare eac4a0c071 fix: harden interceptor lifecycle contracts 2026-09-03 16:46:02 +09:00
Hare c1dfb1add5 Merge remote-tracking branch 'refs/remotes/origin/develop' into work/T-566-memory-rest-dto 2026-09-03 16:07:53 +09:00
Hare e67f9bee08 Merge branch 'develop' into hare/develop 2026-09-03 16:00:05 +09:00
Hare 7c1d81cee9 chore: optimize build 2026-09-03 15:59:40 +09:00
Hare 5cec2eef60 feat: unify Memory REST DTO authority 2026-09-03 15:54:48 +09:00
Hare e62c7cf4f5 Merge commit '7abc6aca45a82665d33115612148536f3a5dd275' into work/T-584-agen-typed-interceptor 2026-09-03 15:47:21 +09:00
Hare 0245980ea5 refactor: finalize interceptor lifecycle boundaries 2026-09-03 15:33:15 +09:00
Hare 7abc6aca45 Merge commit '80221289935e227820aec902988a4f987273e05e' into work/T-549-provider-published-ref
# Conflicts:
#	crates/worker-runtime/src/runtime.rs
2026-09-03 15:25:34 +09:00
Hare f1bcd41ad9 fix: route embedded repository ref observation 2026-09-03 15:05:30 +09:00
Hare 8022128993 Merge branch 'refs/heads/develop' into work/T-565-worker-launch-rest-dto 2026-09-03 14:54:19 +09:00
Hare 68b1aa64e9 feat: type async interceptor failures 2026-09-03 14:46:07 +09:00
Hare f3af8f21dc fix: validate canonical Worker launch segments 2026-09-03 14:43:53 +09:00
Hare 7c056b1db8 fix: publish merge request ref diagnostic DTO 2026-09-03 14:34:09 +09:00
Hare da14c82f71 fix: expose provider ref blockers without failing reads 2026-09-03 14:25:51 +09:00
Hare 1f32c693df refactor: share Worker launch REST DTOs 2026-09-03 14:23:33 +09:00
Hare 74bfbe941e fix: detach stopped worker execution handles 2026-09-03 13:50:25 +09:00
Hare 2884c08466 fix: harden provider ref review boundaries 2026-09-03 13:49:20 +09:00
Hare 85e1ea320a feat: unify worker lifecycle restore semantics 2026-09-03 13:23:31 +09:00
Hare 7be428d8bf fix: require provider-published merge request refs 2026-09-03 12:56:17 +09:00
Hare 56798f9fb4 feat: observe repository refs through runtime providers 2026-09-03 12:56:06 +09:00
Hare 6b1b8a8846 fix: migrate legacy repository references 2026-09-03 11:09:55 +09:00
Hare 9fb1b90856 Merge remote-tracking branch 'refs/remotes/origin/hare/develop' into develop 2026-09-03 09:47:53 +09:00
Hare 30d4023475 fix: preserve blocked TUI submissions 2026-09-03 08:57:28 +09:00
Hare 70432f3d12 fix: retain attachments through TUI retry 2026-09-03 08:44:28 +09:00
Hare 7ee6c307fc fix: require exact attachment acceptance 2026-09-03 08:38:15 +09:00
Hare 36cfbbe6d2 fix: preserve attachment replay evidence 2026-09-03 08:21:11 +09:00
Hare a2e1a3d939 fix: preserve attachment lifecycle boundaries 2026-09-03 08:10:35 +09:00
Hare 9dc8d9a77a fix: fence attachment grants and lifecycle cleanup 2026-09-03 07:22:07 +09:00
Hare 3f6bb65eb1 test: align fork checkpoint regression 2026-09-03 05:55:48 +09:00
Hare 8a70f3cb26 fix: harden uploaded attachment retention and replay 2026-09-03 05:50:47 +09:00
Hare 6c5b8315a3 chore: remove generated test bindings 2026-09-03 05:07:14 +09:00
Hare 690ed0f121 fix: fence uploaded attachment lifecycle 2026-09-03 05:07:03 +09:00
Hare fd60c2b8be fix: render TUI attachment notices with supported alert level 2026-09-03 05:03:49 +09:00
Hare e27b4feb25 feat: upload client-local files from Web and TUI 2026-09-03 04:59:35 +09:00
Hare 09a33e7283 feat: add session-owned uploaded file attachments 2026-09-03 04:58:11 +09:00
Hare d87441448e test: normalize formatted workdir TypeScript 2026-09-03 03:18:09 +09:00
Hare f783f10f6e Merge branch 'work/companion' into hare/develop 2026-09-03 03:06:10 +09:00
Hare 70bdb2d723 test: align client workdir fixture with repository key 2026-09-03 03:03:32 +09:00
Hare 4c1ef04378 fix: show workspace list throughout global sidebar 2026-09-03 02:49:58 +09:00
Hare a595af133c feat: merge durable Workdir updates from develop
# Conflicts:
#	docs/README.md
#	docs/design/durable-operations.md
#	web/workspace/deno.json
2026-09-03 02:47:50 +09:00
Hare f74f3cd133 fix: reject conflicting repository import intent 2026-09-03 02:44:24 +09:00
Hare bcd4848458 Merge branch 'work/companion' into hare/develop 2026-09-03 02:39:54 +09:00
Hare fc05bf9711 fix: restore cursor after inline terminal menus 2026-09-03 02:34:27 +09:00
Hare 63ad590262 fix: remove implicit repository startup selection 2026-09-02 20:00:12 +09:00
Hare 0fd1193b6b fix: harden repository key projections 2026-09-02 19:53:18 +09:00
Hare d996822957 feat: list accessible workspaces in global sidebar 2026-09-02 19:22:45 +09:00
Hare 96349721cb feat: project repository keys across public clients 2026-09-02 19:03:55 +09:00
Hare 8344921b65 feat: add Composer input history navigation 2026-09-02 18:33:43 +09:00
Hare c97b3b7b77 feat: introduce workspace-scoped repository keys 2026-09-02 16:43:28 +09:00
Hare e00e675ed1 feat: add Worker actions to workspace sidebar 2026-09-02 16:24:29 +09:00
Hare 538da1f2b2 fix: validate workspace profile responses 2026-09-02 15:24:33 +09:00
Hare bad37ddc7d feat: centralize workspace profile DTOs 2026-09-02 15:24:12 +09:00
Hare 175eda9f29 fix: authenticate remote worker removal through workspace router 2026-09-02 14:43:49 +09:00
Hare 14c806d38f docs: define durable operation boundaries 2026-09-02 14:43:49 +09:00
Hare 925100fb82 fix: stabilize configuration editor completion 2026-09-02 14:18:51 +09:00
Hare b29b003ea3 feat: define orchestrator cleanup ownership 2026-09-02 02:26:35 +09:00
Hare faa727965b fix: fence orphan recovery claims 2026-09-02 01:59:32 +09:00
Hare d2ffbf2c40 fix: guard Workdir removal recovery ownership 2026-09-02 01:40:48 +09:00
Hare 5418fad7d7 fix: serialize Workdir removal attempts 2026-09-02 01:00:24 +09:00
Hare 510795f1c5 fix: fence Workdir removal retries 2026-09-02 00:25:21 +09:00
Hare 9e0d499987 Merge remote-tracking branch 'origin/develop' into work/T-578-durable-workdir-removal 2026-09-02 00:01:26 +09:00
Hare e96fde0632 feat: add durable Workdir removal authority 2026-09-02 00:01:16 +09:00
Hare eea79dead4 fix: bound Web UX review evidence and cleanup 2026-09-01 23:44:24 +09:00
Hare c4a3f4ba1e fix: harden Web UX capture profiles 2026-09-01 23:00:28 +09:00
Hare 4a4a01b730 feat: add repeatable Web UX inspection workbench 2026-09-01 22:48:26 +09:00
Hare a664e72488 feat: merge Composer paste handling from develop 2026-09-01 22:06:01 +09:00
Hare 21317123a4 fix: deduplicate CodeMirror completion state 2026-09-01 22:03:25 +09:00
Hare 409245cb52 fix: fence disabled Composer mutations 2026-09-01 21:00:26 +09:00
Hare 1aeb6fdb35 fix: enforce Composer read-only state 2026-09-01 20:48:16 +09:00
Hare 816fa96e07 fix: restore workers with remote workdir attachments 2026-09-01 20:41:37 +09:00
Hare 8fbe4218c6 fix: delete complete Composer selections 2026-09-01 20:34:23 +09:00
Hare 00c8df0fc9 fix: preserve exact short paste text 2026-09-01 20:19:53 +09:00
Hare c52c7ead19 feat: add atomic paste chips to Web Composer 2026-09-01 19:50:26 +09:00
Hare d1e8a827c2 fix: preserve configuration completion context 2026-09-01 18:59:16 +09:00
Hare 12d96fb03d fix: preserve short paste line endings 2026-09-01 18:49:44 +09:00
Hare 171a191873 test: run shared composer paste contract 2026-09-01 18:27:21 +09:00
Hare 47dabd8793 fix: keep short composer pastes as text 2026-09-01 18:23:23 +09:00
Hare 2bb661f1cf fix: complete paste artifact storage contract 2026-09-01 17:51:24 +09:00
Hare 04e296a4ef feat: store large paste inputs as artifacts 2026-09-01 17:26:58 +09:00
Hare 4bba227af5 fix: remove legacy resume flag 2026-09-01 16:10:59 +09:00
Hare 5cc78d63c6 fix: merge Companion repository response validation 2026-09-01 13:21:13 +09:00
Hare 323f5dc09c fix: validate repository settings wire response 2026-09-01 13:13:01 +09:00
Hare fb97edfe95 fix: validate workspace schema before owner migration 2026-09-01 12:41:14 +09:00
Hare 070f62ef12 fix: harden workspace owner migration preflight 2026-09-01 12:22:29 +09:00
Hare 981749aa3d feat: require account owners for workspaces 2026-09-01 12:10:52 +09:00
Hare e01b46b30a chore: shard Cargo build cache by workspace 2026-09-01 09:33:47 +09:00
Hare a1b659c45d chore: merge develop into hare/develop
# Conflicts:
#	crates/client/src/lib.rs
#	web/workspace/deno.json
2026-09-01 09:15:10 +09:00
Hare 37a012ef92 chore: configure shared Cargo build caching 2026-09-01 09:04:00 +09:00
Hare 4927e8a843 chore: merge current develop into workspace catalog DTO source
# Conflicts:
#	crates/workspace-api/src/lib.rs
#	crates/workspace-server/src/server.rs
#	web/workspace/deno.json
#	web/workspace/src/lib/workspace/sidebar/types.ts
2026-09-01 08:17:25 +09:00
Hare 025d6ddb47 refactor: make workspace API own workdir projections 2026-09-01 03:16:31 +09:00
Hare 01a4dfd5d3 fix: remove unused workspace API dependency 2026-09-01 02:52:11 +09:00
Hare 1d7158a0bf chore: merge current develop into T-563 source 2026-09-01 02:39:08 +09:00
Hare 9de2afbfc6 fix: validate ticket repository summaries 2026-09-01 02:37:44 +09:00
Hare 9013754a3a refactor: name the workspace catalog list response 2026-09-01 02:24:11 +09:00
Hare 21eea0b104 fix: consume shared workdir create contract 2026-09-01 02:14:57 +09:00
Hare 15e8d7365c test: run workspace DTO boundary regressions 2026-09-01 02:05:07 +09:00
Hare 88e3bf7065 fix: preserve optional workdir wire fields 2026-09-01 02:00:19 +09:00
Hare 2765138bf3 chore: merge current develop into Companion DTO work
# Conflicts:
#	web/workspace/deno.json
2026-09-01 01:59:39 +09:00
Hare 6b20ceac46 fix: validate workspace repository browser payloads 2026-09-01 01:49:38 +09:00
Hare d748274905 refactor: centralize workspace repository response DTOs 2026-09-01 01:49:25 +09:00
Hare e1578217d5 fix: preserve workdir status display contract 2026-09-01 01:45:32 +09:00
Hare 3481682cb4 feat: validate shared workdir REST contracts in web 2026-09-01 01:42:17 +09:00
Hare 996b7f2468 refactor: centralize workdir REST DTOs 2026-09-01 01:42:05 +09:00
Hare 879993b9b1 fix: accept zero-length Companion transcripts 2026-09-01 01:41:16 +09:00
Hare 6604154e3f test: cover repository access loader failures 2026-09-01 01:39:55 +09:00
Hare a9ad42a970 fix: align Companion REST DTO contracts 2026-09-01 01:29:04 +09:00
Hare 8b3d1302c6 fix: share repository access API contracts 2026-09-01 01:22:27 +09:00
Hare ac9269d6ce fix: omit local bash spill path from remote commands 2026-08-31 23:14:33 +09:00
Hare 8ffb716817 fix: preserve workdir operation error classifications 2026-08-31 23:14:23 +09:00
Hare 23f671fa48 fix: remove redundant settings overview 2026-08-31 20:09:29 +09:00
Hare d7cdcde443 fix: preserve standalone scope conflict details 2026-08-31 19:28:09 +09:00
Hare 95a81faf63 chore: merge hare/develop into companion work 2026-08-31 18:45:32 +09:00
Hare bb8bb6d099 feat: restore interactive standalone profile selection 2026-08-31 18:43:46 +09:00
Hare 310801a29b feat: add repository settings registration 2026-08-31 18:20:17 +09:00
Hare 7d09b20445 feat: add workspace repository registration API 2026-08-31 18:12:08 +09:00
Hare 456a06f194 fix: propagate browser actor to workspace routes 2026-08-31 16:55:45 +09:00
Hare 62eaefb1fa feat: spill long bash output to worker temp storage 2026-08-31 16:52:27 +09:00
Hare 10264b4019 Merge branch 'work/companion' into hare/develop 2026-08-31 15:51:36 +09:00
Hare ab9765d91d feat: refine workspace navigation chrome 2026-08-31 15:50:49 +09:00
Hare e7f4c6864f fix: make WorkerId the standalone primary identity 2026-08-31 14:37:46 +09:00
Hare bde1dea2a5 fix: require confirmation before Ctrl-X shutdown 2026-08-31 13:07:39 +09:00
Hare 13a021c480 feat: add TUI run status spinner 2026-08-31 12:46:47 +09:00
Hare a7f09fad98 fix: route standalone protocol through client transports 2026-08-31 12:11:35 +09:00
Hare 10eaf4a5fb refactor: name worker event channels by role 2026-08-31 11:21:14 +09:00
Hare bcada300e3 fix: mark standalone TUI connection ready 2026-08-31 09:44:13 +09:00
Hare 9756174676 chore: merge standalone feature into companion integration
# Conflicts:
#	crates/client/src/target.rs
#	crates/client/src/ticket_role.rs
#	crates/manifest/src/profile.rs
#	crates/tui/src/dashboard/tests.rs
#	crates/tui/src/worker_list.rs
#	crates/workspace-server/src/hosts.rs
#	crates/yoi/src/main.rs
2026-08-31 02:01:38 +09:00
Hare 6dd8461a46 chore: merge develop into companion integration
# Conflicts:
#	crates/workspace-server/src/server.rs
2026-08-31 01:51:13 +09:00
Hare 12cc2eb0e9 feat: unify workspace settings and runtime resources 2026-08-31 01:32:31 +09:00
Hare 38dd717aa6 test: lock discovery control grant separation 2026-08-30 23:07:27 +09:00
Hare 6640c902de feat: add privileged workspace worker discovery 2026-08-30 22:48:26 +09:00
Hare 583c343d08 fix: reject duplicate backend selectors 2026-08-30 21:57:50 +09:00
Hare dfc48f7a05 fix: preserve login backend selection 2026-08-30 21:48:07 +09:00
Hare cd9d854595 fix: reject standalone runtime selectors 2026-08-30 21:36:33 +09:00
Hare 766cbd17e5 refactor: centralize worker control routing 2026-08-30 21:26:29 +09:00
Hare 6df95bf981 fix: make workers help backend specific 2026-08-30 21:26:27 +09:00
Hare 6398ca0893 docs: clarify standalone resume help 2026-08-30 21:16:45 +09:00
Hare 62372a48cc fix: parse product help before target resolution 2026-08-30 21:08:08 +09:00
Hare 733632509a fix: keep product help target independent 2026-08-30 20:57:16 +09:00
Hare e1c13ec314 chore: merge final develop into T-556 2026-08-30 20:49:02 +09:00
Hare 928ff0eabe fix: isolate standalone target resolution 2026-08-30 20:45:40 +09:00
Hare 406559b13d refactor: remove legacy local client authority 2026-08-30 20:35:26 +09:00
Hare 20c16aa6fd chore: merge current develop into T-556 2026-08-30 20:32:20 +09:00
Hare 44ba5fd6d4 fix: expose canonical SubWorker control tools 2026-08-30 20:25:17 +09:00
Hare 745c6adbf2 fix: apply Grep filters to direct files 2026-08-30 20:15:01 +09:00
Hare a9aa09636f fix: preserve Workdir operation error classification 2026-08-30 20:07:46 +09:00
Hare 6945986dd1 fix: use canonical standalone session path 2026-08-30 19:53:31 +09:00
Hare 80c1f48f0e fix: allow Grep to target a file 2026-08-30 19:50:57 +09:00
Hare 31e18205f0 fix: fail closed on unknown standalone leases 2026-08-30 19:44:15 +09:00
Hare e84a9d3f9b fix: synchronize Resume busy state from protocol events 2026-08-30 14:11:12 +09:00
Hare 133feb8c76 feat: add standalone resume picker 2026-08-30 13:46:24 +09:00
Hare c5fd9c01e5 feat: persist standalone sessions for restore 2026-08-30 13:46:16 +09:00
Hare a7bf5ceac3 test: update client session snapshot fixture 2026-08-30 13:23:56 +09:00
Hare 74139aeb7e chore: merge develop into hare/develop 2026-08-30 13:19:24 +09:00
Hare 0cae4fd05c fix: retry device login code collisions 2026-08-30 12:55:12 +09:00
Hare 4b3b4fda61 feat: connect standalone host to local TUI 2026-08-30 12:40:22 +09:00
Hare adb684a6bf fix: preserve typed user input snapshots 2026-08-30 12:33:15 +09:00
Hare 8493472983 refactor: require annotated session log history 2026-08-30 12:18:44 +09:00
Hare 862eeb7add fix: route runtime workers through shared bootstrap 2026-08-30 11:54:20 +09:00
Hare 4d9b211d69 feat: add in-process standalone worker host 2026-08-30 11:29:59 +09:00
Hare ebb272324c Merge branch 'work/T-552-ticket-relation-projection' into hare/develop 2026-08-30 10:15:33 +09:00
Hare c0290512b3 fix: align Ticket relation projection 2026-08-30 10:15:23 +09:00
Hare 4ec56fe41e Merge remote-tracking branch 'origin/develop' into work/T-545-canonical-session-snapshot 2026-08-30 09:42:57 +09:00
Hare f8a7c46cf9 fix(session): preflight migration and retain timestamps 2026-08-30 09:42:46 +09:00
Hare 2bab8a9bb6 fix: distinguish Ticket activity notifications 2026-08-30 09:00:48 +09:00
Hare 89e6a6215a Merge remote-tracking branch 'origin/develop' into work/T-545-canonical-session-snapshot
# Conflicts:
#	web/workspace/src/lib/workspace/console/model.ts
2026-08-30 00:42:29 +09:00
Hare 88be87e03e feat(session): expose canonical public snapshots 2026-08-30 00:41:51 +09:00
Hare 22867faa9c test: align Profile consumers with explicit default 2026-08-30 00:37:52 +09:00
Hare 16c0fc704d feat: unify builtin Profile resolution authority 2026-08-30 00:28:58 +09:00
Hare 32fdd076bf feat: authenticate Backend target requests 2026-08-29 23:41:55 +09:00
Hare 402ae0d466 fix: replay annotated history in Web Console 2026-08-29 23:10:32 +09:00
Hare acb3c6d68b fix: separate Ticket keys from assignment identity 2026-08-29 22:52:03 +09:00
Hare 40ac83e632 chore: merge develop into hare/develop 2026-08-29 13:25:32 +09:00
Hare 58da395941 fix: merge workdir registry cleanup 2026-08-29 13:21:40 +09:00
Hare 0e3ef94c9e feat: merge web console tool call presentation 2026-08-29 13:21:35 +09:00
Hare 1f68dfc2b5 fix: group grep content output by file 2026-08-28 02:05:12 +09:00
Hare 84977a464c feat: improve web console tool call presentation 2026-08-28 00:05:00 +09:00
Hare 62ada5eaa4 fix: bound safe-boundary pause escalation 2026-08-27 23:57:20 +09:00
Hare f5ff0b7c13 fix: confirm bash cancellation cleanup 2026-08-27 23:01:06 +09:00
Hare 3337cafcdf feat: own cancellable tool execution lifecycle 2026-08-27 23:01:00 +09:00
Hare e87784118b fix: preserve resumable paused tool calls 2026-08-27 21:48:59 +09:00
Hare 40fada28ea fix: preserve confirmed output on interceptor abort 2026-08-27 21:30:04 +09:00
Hare 58cc94d4b7 fix: terminalize interrupted tool executions 2026-08-27 20:54:13 +09:00
Hare ccabea59c9 fix: terminalize parallel tool outputs on completion 2026-08-27 19:16:49 +09:00
Hare 8cc1dc042d fix: remove deleted workdirs from registry 2026-08-27 18:36:17 +09:00
Hare 183c37446e fix: fence running snapshots on input commit 2026-08-27 15:42:20 +09:00
Hare 7aa06afc45 chore: preserve reviewed source lineage
# Conflicts:
#	crates/agen/README.md
#	crates/agen/examples/engine_cancel_demo.rs
#	crates/agen/examples/engine_cli.rs
#	crates/agen/src/engine.rs
#	crates/agen/tests/annotated_history_test.rs
#	crates/agen/tests/callback_test.rs
#	crates/agen/tests/engine_fixtures.rs
#	crates/agen/tests/engine_state_test.rs
#	crates/agen/tests/parallel_execution_test.rs
#	crates/agen/tests/reasoning_round_trip_test.rs
#	crates/session-store/tests/session_test.rs
#	crates/worker/src/worker.rs
2026-08-27 15:13:27 +09:00
Hare 1515a2fb86 fix: reconcile typed history with run exits 2026-08-27 15:12:05 +09:00
Hare ec798c58d7 fix: preserve annotated history through rewind 2026-08-27 14:54:24 +09:00
Hare e365189276 feat: add provenance-aware worker history 2026-08-27 14:54:24 +09:00
Hare 116d610ad0 fix: project Ticket mutation outputs to human keys 2026-08-27 14:18:48 +09:00
Hare 75c570962d Merge commit '7edc588202dfbfd4c834f677f510ddda7f3d6451' into work/00001M10HW6BV-model-facing-resource-projection 2026-08-27 13:46:19 +09:00
Hare cae8ac1799 fix: allow missing Objective query snippets 2026-08-27 13:46:10 +09:00
Hare 917cc222a3 fix: resolve relation summaries to Ticket keys 2026-08-27 13:22:08 +09:00
Hare 7edc588202 chore: refresh T-528 after T-541 2026-08-27 13:09:44 +09:00
Hare c83461508b Merge commit '21b3dd1da1b1bbf18799a0623bf67dbe6266067c' into work/00001M10HW6BV-model-facing-resource-projection 2026-08-27 13:09:15 +09:00
Hare 651d64f34d Merge branch 'work/00001M10N3Z0H-ticket-detail-route-sync' into hare/develop 2026-08-27 12:57:52 +09:00
Hare b98d4b59f5 fix: synchronize reused ticket detail routes 2026-08-27 12:55:01 +09:00
Hare 374449e663 feat: add provenance-aware worker history 2026-08-27 12:51:01 +09:00
Hare 4c876a201b fix: validate projected resource keys canonically 2026-08-27 12:49:59 +09:00
Hare 21b3dd1da1 Merge commit '0496cd907bc7bb96e9aa1c6d385bedb616bf3233' into work/00001M10FJVA2-orchestrator-queue-notice 2026-08-27 12:46:27 +09:00
Hare 5ca0ea9228 fix: sanitize orchestrator queue attention 2026-08-27 12:46:10 +09:00
Hare d5c3a68a37 fix: use Ticket resource keys in handoffs 2026-08-27 12:45:08 +09:00
Hare 2b33b9158d chore: refresh T-528 against develop 2026-08-27 12:45:01 +09:00
Hare b31642e284 feat: project Ticket and Objective human references 2026-08-27 12:39:28 +09:00
Hare 3a7a3307ef fix: map internal worker terminal lifecycles 2026-08-27 12:27:55 +09:00
Hare 0496cd907b fix: use Ticket resource keys in handoffs 2026-08-27 12:24:19 +09:00
Hare 975b4fa700 feat: add typed engine run exits 2026-08-27 11:42:49 +09:00
Hare 060f280fdf fix: allow parent commands during write delegation 2026-08-27 11:27:27 +09:00
Hare 7aaf189247 fix: scope delegated commands by cwd 2026-08-27 11:11:06 +09:00
Hare df6d99c07d Merge branch 'develop' into hare/develop 2026-08-27 09:21:58 +09:00
Hare 63306cf017 feat: integrate runtime Git cache materialization 2026-08-27 08:30:38 +09:00
Hare 08be5e85e4 fix: preserve command sessions across access refresh 2026-08-27 08:09:22 +09:00
Hare 9843510e1f fix: remove conflicting coder worker control provider 2026-08-26 23:52:25 +09:00
Hare 83bda3dfb2 fix: restore companion subworker control 2026-08-26 22:06:34 +09:00
Hare 0ab15aa227 chore: merge hare/develop into develop 2026-08-26 19:44:31 +09:00
Hare 29c2fb8e06 fix: refresh repository access for worker workdirs 2026-08-26 19:27:10 +09:00
Hare 4ebc465e8d fix: constrain repository SSH commands to authorized source 2026-08-26 19:02:20 +09:00
Hare 4b132a21e9 fix: bind repository SSH secrets to one-shot resources 2026-08-26 18:28:22 +09:00
Hare b644971d45 fix: preauthorize repository access without persisting secrets 2026-08-26 17:23:43 +09:00
Hare df34533765 fix: broker read-only repository SSH operations 2026-08-26 16:48:37 +09:00
Hare 6f4efb36bb fix: order optional feature service bindings 2026-08-26 16:28:54 +09:00
Hare 108d5b14d7 fix: withhold write-capable credentials from read-only sessions 2026-08-26 16:23:48 +09:00
Hare f633b86b35 chore: integrate current develop for review 2026-08-26 16:12:48 +09:00
Hare 1873e18f8e fix: enforce attachment access transitions 2026-08-26 16:10:39 +09:00
Hare 3cdcbb47bf fix: preserve selector retries and workdir observations 2026-08-26 16:05:14 +09:00
Hare aaa9c7987c fix: reject ambiguous feature service providers 2026-08-26 16:01:06 +09:00
Hare 048007a042 test: complete tool output fixture 2026-08-26 15:47:34 +09:00
Hare cb35b40b9d feat: plan feature service installation 2026-08-26 15:47:27 +09:00
Hare 3b71fe03b4 fix: include merge request status regression in web tests 2026-08-26 15:27:19 +09:00
Hare 471db64bcc fix: preserve repository access across retries 2026-08-26 15:21:52 +09:00
Hare 5e2234763c fix: distinguish completed review requests in merge request status 2026-08-26 15:20:13 +09:00
Hare 1d140be715 feat: align merge request review workflow with selector refs 2026-08-26 15:03:26 +09:00
Hare ffb2a34ae5 fix: enforce repository access and cache boundaries 2026-08-26 14:39:37 +09:00
Hare ccf7de1a55 fix: preserve run budget across segment forks 2026-08-26 14:13:43 +09:00
Hare ccf3c80d29 fix: clear abandoned run budget before compaction 2026-08-26 14:03:07 +09:00
Hare 3a3c89e0b4 feat: materialize repositories through runtime Git cache 2026-08-26 13:54:25 +09:00
Hare 17c629136a fix: scope max turns to logical runs 2026-08-26 13:47:35 +09:00
Hare 52a5c4141f chore: merge current develop into Ticket source 2026-08-26 12:24:14 +09:00
Hare c9ba27c333 fix: update RepositoryRecord test URI access 2026-08-26 11:50:41 +09:00
Hare 46f6e2c58b fix: complete Repository access management contracts 2026-08-26 11:38:23 +09:00
Hare d1f47e5a22 fix: align Repository access DCDL fields 2026-08-26 11:06:19 +09:00
Hare 65de94bad3 feat: expose compaction as an internal worker 2026-08-26 10:39:43 +09:00
Hare 4e935c6203 test: refresh clean-build fixtures and assertions 2026-08-26 10:16:18 +09:00
Hare eac07cf5a8 fix: provide subworker control service 2026-08-26 10:16:10 +09:00
Hare 260259d461 fix: return ticket queue outcomes to web clients 2026-08-26 10:16:03 +09:00
Hare a9fb092834 feat: add Repository access settings UI 2026-08-26 08:51:23 +09:00
Hare 3a21a68792 feat: add Workspace Repository SSH secret authority 2026-08-26 08:51:15 +09:00
Hare 9d572d18bc fix: accept reserved workers during initial flow resolution 2026-08-26 07:52:04 +09:00
Hare f7852e8034 fix: remove misleading runtime capability projections 2026-08-26 06:19:33 +09:00
Hare 8c075de147 fix: allow remote runtime workdir creation 2026-08-26 05:13:21 +09:00
Hare 864367f4f5 fix: remove repository-local server configuration paths 2026-08-26 03:56:35 +09:00
Hare 33db2ea7f4 fix: unify browser origin configuration 2026-08-26 02:37:14 +09:00
Hare 8396d09891 fix: limit coder ticket comments to handoffs 2026-08-25 13:21:47 +09:00
Hare bf7171924d feat: integrate dependency queue planning 2026-08-25 13:08:09 +09:00
Hare 097c363fbc fix: block internal dependency cycles in projections 2026-08-25 12:54:47 +09:00
Hare 7dd8809e38 fix: fail closed without queue target authority 2026-08-25 12:44:03 +09:00
Hare 1749757036 fix: align queue eligibility with target authority 2026-08-25 12:24:31 +09:00
Hare 5857e6121c fix: preserve dependency queue atomicity 2026-08-25 12:05:43 +09:00
Hare a41147916b fix: confirm queue closures across clients 2026-08-25 11:51:40 +09:00
Hare cabe38db1d fix: align queue projections with dependency closure 2026-08-25 11:19:27 +09:00
Hare f079479160 feat: queue ready dependency closures atomically 2026-08-25 10:53:31 +09:00
Hare 87e160a01a test: track current migration version in dry run 2026-08-25 10:29:48 +09:00
Hare f94d829bf8 feat: integrate hare/develop 2026-08-25 10:29:41 +09:00
Hare 9a05bfa0c3 feat: allow ticket implementation cancellation 2026-08-25 09:52:21 +09:00
Hare c1d46859a3 fix: block cleanup for assigned workers 2026-08-25 09:39:33 +09:00
Hare 87ecbcb113 fix: validate non-worker ticket assignments 2026-08-25 08:09:31 +09:00
Hare 1fb2949561 fix: give reviewer write-scoped command tools 2026-08-25 04:45:17 +09:00
Hare 11be777fc0 fix: verify signed Workspace query targets 2026-08-25 01:12:24 +09:00
Hare ff94161fc0 test: authenticate workdir route fixtures 2026-08-25 00:54:28 +09:00
Hare c2ab9a950f feat: integrate Workspace API authorization 2026-08-25 00:54:13 +09:00
Hare 8e26a0f5a8 chore: merge latest develop into Ticket source
# Conflicts:
#	crates/workspace-server/src/store.rs
2026-08-24 23:24:12 +09:00
Hare d1c15ee295 fix: protect direct auth mutation routes 2026-08-24 14:58:34 +09:00
Hare 00a96234c6 fix: enforce CSRF on server mutations 2026-08-24 14:50:15 +09:00
Hare fc3b663510 fix: authorize Runtime profile archive fetches 2026-08-24 14:39:16 +09:00
Hare e4e045d059 fix: preserve Workdir provider rejection codes 2026-08-24 14:30:34 +09:00
Hare 436feaf33d fix: close remaining Workspace auth gaps 2026-08-24 14:28:44 +09:00
Hare 29f450b962 fix: map missing default Runtime to bad request 2026-08-24 14:16:38 +09:00
Hare db343893c8 fix: secure HTTPS browser session cookies 2026-08-24 14:11:51 +09:00
Hare 554906ec02 fix: treat legacy Runtime config as unconfigured 2026-08-24 14:07:42 +09:00
Hare 18c37f4842 fix: persist Workdir Runtime failure classifications 2026-08-24 13:59:52 +09:00
Hare 83382b824a fix: protect legacy Workspace API routes 2026-08-24 13:56:46 +09:00
Hare 6203316aa1 fix: defer local repository validation to runtimes 2026-08-24 13:46:02 +09:00
Hare d57b4d1d5e fix: align ticket queue projection test 2026-08-24 13:42:39 +09:00
Hare 379ae214fc feat: queue tickets with dependency context 2026-08-24 13:40:33 +09:00
Hare 163a403636 feat: support typed remote repository sources 2026-08-24 13:35:19 +09:00
Hare 53edaadc3a feat: authenticate Workspace API requests 2026-08-24 13:32:55 +09:00
Hare 3c2664c3ce feat: sign Runtime workspace requests 2026-08-24 13:32:49 +09:00
Hare d9048954a5 fix: reject unsupported Workdir runtimes before delegation 2026-08-24 13:24:59 +09:00
Hare 4f84dfd73f feat: resolve default Runtime for Workdir creation 2026-08-24 13:15:18 +09:00
Hare d69c367285 feat: prepare agen crates for publication 2026-08-23 03:41:51 +09:00
Hare aa8dd4f89e test: align workspace server fixtures with current authority 2026-08-23 02:19:36 +09:00
Hare b12e0785e2 fix: migration error 2026-08-23 02:10:03 +09:00
Hare 24291a4545 fix: resolve ticket assignment target integration 2026-08-23 00:23:38 +09:00
Hare 92d073ff36 fix: accept queued lifecycle assignments 2026-08-22 23:58:55 +09:00
Hare bc57ef38c1 fix: guard state change event transitions 2026-08-22 23:48:11 +09:00
Hare ae8a0316d8 fix: guard state field workflow transitions 2026-08-22 23:41:35 +09:00
Hare 2cfbb1caea fix: make role assignment retries idempotent 2026-08-22 23:34:52 +09:00
Hare 703398bd2c fix: reject invalid coder principals safely 2026-08-22 23:27:27 +09:00
Hare 10c80ae514 fix: close ticket start authority gaps 2026-08-22 23:17:44 +09:00
Hare 285763f4ae fix: enforce ticket assignment mutation fences 2026-08-22 23:06:28 +09:00
Hare 8030045602 feat: generalize ticket role assignments 2026-08-22 22:48:56 +09:00
Hare 8c85b93e7d feat: integrate ticket notify delivery warnings 2026-08-22 21:59:21 +09:00
Hare 4017992c7d fix: share ticket query route contracts 2026-08-22 20:20:38 +09:00
Hare 9dc6d8f144 fix: preserve backend product authority boundaries 2026-08-22 20:03:27 +09:00
Hare 779ced82b1 fix: allow workspace clients through ticket REST operations 2026-08-22 19:43:18 +09:00
Hare 30e4985f9a feat: route product commands through backend targets 2026-08-22 19:16:14 +09:00
Hare 1a1e3c286f feat: integrate workspace memory settings authority 2026-08-22 00:34:30 +09:00
Hare 71c906e04d fix: reject legacy workspace worker restore 2026-08-22 00:28:33 +09:00
Hare e6bfb27fa9 fix: make workdir command completion stateful 2026-08-22 00:20:45 +09:00
Hare 2a3ece0364 fix: validate workspace memory settings authority 2026-08-21 22:16:41 +09:00
Hare 61d174b174 fix: enforce workspace memory settings contract 2026-08-21 22:05:53 +09:00
Hare c4814115de feat: bind memory language to workspace settings 2026-08-21 21:50:12 +09:00
Hare f84377b2fe feat: integrate ticket notify delivery warnings 2026-08-21 20:32:26 +09:00
Hare 19f506f8bc fix: restore reviewer ticket and merge request reads 2026-08-21 20:23:26 +09:00
Hare 0a9d09b958 test: cover complete notification delivery failure 2026-08-21 19:19:26 +09:00
Hare 83c6d290b4 fix: complete notification warning context 2026-08-21 19:11:16 +09:00
Hare 831db34acf fix: surface failed Ticket notification delivery 2026-08-21 19:05:53 +09:00
Hare 4a276b0af0 fix: scope console and workspace shell widths 2026-08-21 18:34:40 +09:00
Hare c2b82a2591 fix: contain ticket operation rail layout 2026-08-21 18:30:38 +09:00
Hare 99daaf31b6 fix: widen workspace shell to 920px 2026-08-21 18:08:53 +09:00
Hare 94e51ea6d1 fix: clean up console task summary 2026-08-21 18:06:55 +09:00
Hare f2d2ab0102 fix: center workspace shell at 720px 2026-08-21 18:04:48 +09:00
Hare 6f42f23d2b fix: enlarge overview activity summaries 2026-08-21 17:40:33 +09:00
Hare 8f54fa2a00 fix: remove console composer overhang 2026-08-21 17:37:37 +09:00
Hare c110965911 fix: remove redundant console chrome 2026-08-21 17:26:47 +09:00
Hare 2a48dfc41a fix: set bash output to compact terminal sizing 2026-08-21 15:22:52 +09:00
Hare 0451142d41 fix: align bash sizing with xterm defaults 2026-08-21 15:18:32 +09:00
Hare 65f18b0cdb fix: match bash output to terminal cell sizing 2026-08-21 15:11:15 +09:00
Hare ea31c7ca81 fix: tighten bash terminal line spacing 2026-08-21 13:46:52 +09:00
Hare dd47dba5b0 feat: render bash ANSI colors in web console 2026-08-21 13:36:03 +09:00
Hare cbedc76d06 fix: simplify live bash output presentation 2026-08-21 13:12:50 +09:00
Hare a4aa1a1848 fix: preserve command telemetry through workdir delegation 2026-08-21 13:01:44 +09:00
Hare ee8ee360ef fix: share workspace runtime worker contracts 2026-08-21 12:35:58 +09:00
Hare 72cae33ea6 chore: merge develop into work/companion 2026-08-21 11:38:47 +09:00
Hare 0cd5ca11cc feat: expose merge requests as workspace resources 2026-08-21 11:31:45 +09:00
Hare ccb9d03865 feat: add workspace switcher menu 2026-08-21 11:30:23 +09:00
Hare 41cd2d044a fix: verify resource key schema drift 2026-08-21 10:32:25 +09:00
Hare 85d1815dcf feat: adopt Workspace resource keys 2026-08-21 10:20:32 +09:00
Hare 9989aed916 Merge branch 'work/companion' into develop 2026-08-21 07:21:09 +09:00
Hare 3f2ba9df47 fix: migration error 2026-08-21 07:20:48 +09:00
Hare cd9f0f009e chore: merge develop into work/companion
# Conflicts:
#	crates/tui/src/app.rs
2026-08-21 07:18:07 +09:00
Hare b49abce798 fix: locate multiline Console Tasks source 2026-08-21 07:13:46 +09:00
Hare 51b381a701 feat: switch Web SubWorker views 2026-08-21 07:12:37 +09:00
Hare bea121ade0 feat: switch TUI SubWorker views 2026-08-21 07:12:20 +09:00
Hare 18112d29a6 feat: project SubWorker activity in sidebar 2026-08-21 07:12:04 +09:00
Hare 8bedfcda84 fix: remove caller worker revision fence 2026-08-21 07:11:45 +09:00
Hare 402543d617 Merge remote-tracking branch 'origin/develop' into develop 2026-08-21 05:37:57 +09:00
Hare a21ef31ee7 fix: make authentication workspace independent 2026-08-21 05:04:17 +09:00
Hare e8c159247a fix: serve chooser before workspace creation 2026-08-21 04:51:44 +09:00
Hare 5dd9392575 fix: serve workspace chooser at root 2026-08-21 04:45:05 +09:00
Hare da2296bc9c fix: restore workspace routing contracts 2026-08-21 04:36:40 +09:00
Hare 8e4f35eb3f fix: update TUI command snapshot fixture 2026-08-21 04:21:18 +09:00
Hare 9917c09b19 feat: integrate workspace switching 2026-08-21 04:18:32 +09:00
Hare 4445501f6c fix: recover command snapshots after provider lag 2026-08-21 04:09:42 +09:00
Hare 6fe36f3e46 feat: integrate command output streaming 2026-08-21 03:54:47 +09:00
Hare cfb173c570 fix: preserve command stream boundaries and lifecycle evidence 2026-08-21 03:49:45 +09:00
Hare ad729af592 feat: add web workspace chooser and creation 2026-08-20 18:34:28 +09:00
Hare 17abe1c40c feat: add scoped TUI workspace selection 2026-08-20 18:34:18 +09:00
Hare 4b8dc302ee fix: fence workspace bootstrap and resource routing 2026-08-20 17:52:23 +09:00
Hare cf2e74404d feat: dispatch registered workspaces independently 2026-08-20 17:28:14 +09:00
Hare a0e161c653 feat: integrate workspace-scoped resource references 2026-08-20 16:10:42 +09:00
Hare 614157424f fix: remove cargo check warnings 2026-08-20 15:16:29 +09:00
Hare f5f80fcd48 feat: add web console modes and run status 2026-08-20 15:02:24 +09:00
Hare 7dd4539f50 feat: add compact TUI activity overview 2026-08-20 15:02:03 +09:00
Hare e66876249e fix: remove redundant system reminder wrappers 2026-08-20 15:01:43 +09:00
Hare d39eb43419 fix: track retained assignment parents 2026-08-20 11:38:13 +09:00
Hare 674b897321 fix: validate assignment runtime snapshots 2026-08-20 11:28:41 +09:00
Hare d7e54ed181 fix: preserve retained assignment history 2026-08-20 11:21:31 +09:00
Hare 3e833b5295 fix: finalize stopped subworker sessions 2026-08-20 11:19:02 +09:00
Hare 9194f0a1ba test: complete ticket reference fixture 2026-08-20 11:19:02 +09:00
Hare 6945b7b3c3 fix: bind assignment events to tickets 2026-08-20 11:14:33 +09:00
Hare 560226dea2 fix: enforce assignment workspace references 2026-08-20 11:06:31 +09:00
Hare 4583b512b3 docs: add workspace schema migration runbook 2026-08-20 10:43:05 +09:00
Hare 223a6ed011 feat: enforce workspace-scoped resource references 2026-08-20 10:42:57 +09:00
Hare a82234a75e docs: report subworker feature installation failure 2026-08-20 10:33:12 +09:00
Hare 92594488da feat: stream workdir command output to consoles 2026-08-20 10:32:58 +09:00
Hare 2315c69f0a fix(worker-runtime): complete embedded store identity migration 2026-08-20 08:44:09 +09:00
Hare 9d003a5c98 fix: exclude stale worker sockets from migration 2026-08-20 07:51:34 +09:00
Hare 53ec914a52 docs: report subworker control dependency failure 2026-08-20 07:21:03 +09:00
Hare d052cedc7d fix: make worker identity migrations dry-runnable 2026-08-20 07:21:03 +09:00
Hare de72afd9a1 fix: clear stale internal worker in-flight state 2026-08-20 06:18:21 +09:00
Hare 80ffff642f fix: resolve ticket keys for nested merge request routes 2026-08-20 02:39:52 +09:00
Hare 97960d4e3f fix: resolve human keys at resource boundaries 2026-08-20 02:30:09 +09:00
Hare a96038d79f feat: add canonical human-key resource routes 2026-08-20 02:17:21 +09:00
Hare 1ca36d6b66 feat: add workspace resource human keys 2026-08-20 02:17:00 +09:00
Hare bb8eda379f fix: migrate all persisted Workspace Worker references 2026-08-20 00:49:21 +09:00
Hare 2858e8ceba fix: align Workdir occupancy UI with stable worker IDs 2026-08-19 23:15:34 +09:00
Hare e35b5797a3 feat: promote workers to Workspace-owned UUIDv7 identities 2026-08-19 23:04:02 +09:00
Hare 25baeedc03 Merge branch 'work/companion' into develop 2026-08-19 21:22:04 +09:00
Hare 17d81e29cc chore: merge authoritative develop into ticket source 2026-08-19 12:05:54 +09:00
Hare 08bce5b630 chore: merge current develop into ticket source 2026-08-19 11:54:35 +09:00
Hare 84f1b229ba fix: validate remote workdir grants before leasing 2026-08-19 11:42:49 +09:00
Hare 856ea7119a fix: clarify orchestrator branch integration 2026-08-19 11:24:55 +09:00
Hare 5f2798458e fix: align delegated paths with provider resolution 2026-08-19 11:22:56 +09:00
Hare af3decce51 fix: preserve nested workdir delegation chains 2026-08-19 11:04:40 +09:00
Hare 1cb6cd4e98 fix: enforce delegated workdir scope after resolution 2026-08-19 10:43:37 +09:00
Hare 21bd089a23 feat: delegate subworker access through workdir sessions 2026-08-19 09:45:56 +09:00
Hare 88f463e633 feat: add scoped workdir delegation sessions 2026-08-19 09:45:49 +09:00
Hare ce62e09919 feat: stream internal subworker output through parent 2026-08-19 09:24:14 +09:00
Hare fe74d7c4b8 chore: update ticket source from develop 2026-08-19 08:38:13 +09:00
Hare 73902b03b6 fix: preserve live errors across segment rotation 2026-08-19 08:29:36 +09:00
Hare 9aeaa52bdb fix: retain worker run errors in console history 2026-08-19 08:12:55 +09:00
Hare 89ee5e48a5 fix: use active prompt projection route 2026-08-19 07:03:15 +09:00
Hare 5b5396599d fix: restore pending workspace prompt catalog 2026-08-19 06:52:32 +09:00
Hare 1e33b2945c fix: requeue uncommitted notifications 2026-08-19 06:45:45 +09:00
Hare 50b05051bb feat: persist prompt render provenance 2026-08-19 06:40:29 +09:00
Hare 4208b6228e fix: fence prompt projection freshness 2026-08-19 06:22:41 +09:00
Hare bb558bad2b fix: share compiled prompt projection cache 2026-08-19 06:19:31 +09:00
Hare fcc7c49ff1 fix: enforce prompt projection workspace scope 2026-08-19 06:07:24 +09:00
Hare fb5f49d2a2 test: align pending orchestrator restore contract 2026-08-19 06:05:43 +09:00
Hare 82eaa986d8 fix: scope prompt projection cache fills 2026-08-19 06:03:18 +09:00
Hare 17d6789b41 feat: propagate workspace prompt revisions 2026-08-19 06:01:03 +09:00
Hare d24d50cac9 feat: refresh prompts at operation boundaries 2026-08-19 06:00:57 +09:00
Hare 44b3c78761 fix: reject unrecoverable pending worker restore 2026-08-19 05:02:50 +09:00
Hare 08daf782b9 fix: accept queued tickets after coder spawn 2026-08-19 04:55:29 +09:00
Hare d7e35ea9ee fix: keep restore independent of live prompts 2026-08-19 04:41:38 +09:00
Hare 39aa465a51 fix: keep config bundles transport-only 2026-08-19 04:36:38 +09:00
Hare 382b5e57f2 fix: carry prompt projection source identity 2026-08-19 04:30:00 +09:00
Hare 0d011ea0cd fix: fence prompt cache source revisions 2026-08-19 04:25:13 +09:00
Hare b740b2d1e2 fix: remove config bundle restore dependency 2026-08-19 04:23:37 +09:00
Hare c97bde9ee0 fix: isolate workspace profile launch projections 2026-08-18 22:47:34 +09:00
Hare bb742e253d feat: allow companion to manage workdirs 2026-08-18 10:47:31 +09:00
Hare a10507c54f merge: integrate orchestration
# Conflicts:
#	crates/flow/src/builtin.rs
#	crates/manifest/src/profile.rs
#	crates/worker/src/prompt/catalog.rs
#	crates/worker/src/prompt/system.rs
#	resources/flows/coder-review.dcdl
#	resources/prompts/role/coder.md
#	resources/prompts/role/orchestrator.md
#	web/workspace/src/lib/workspace/console/worker-console.ui.test.ts
#	web/workspace/src/lib/workspace/styles/tickets.css
#	web/workspace/src/routes/w/[workspaceId]/tickets/+page.svelte
#	web/workspace/src/routes/w/[workspaceId]/tickets/+page.ts
2026-08-18 09:55:27 +09:00
Hare 6a607ccbed feat: integrate bounded workspace query pagination 2026-08-18 09:03:59 +09:00
Hare 4ac79b3665 fix: publish coder revisions before review 2026-08-18 08:14:58 +09:00
Hare a4fdf9cc45 docs: record test code quality audit 2026-08-18 08:14:58 +09:00
Hare 981c422122 fix: preserve completed merge request replays 2026-08-18 08:14:43 +09:00
Hare ab0f57c00a fix: include incoming Ticket relation filters 2026-08-18 08:14:05 +09:00
Hare b723c64fa1 fix: preserve accepted Ticket query filters 2026-08-18 08:06:21 +09:00
Hare f86ae6d52f feat: connect selector-based merge request flow 2026-08-18 08:06:02 +09:00
Hare 9a548d2b5e fix: require observed merge target completion 2026-08-18 08:05:57 +09:00
Hare 4e738ac5eb fix: query authoritative merge request review events 2026-08-18 07:57:20 +09:00
Hare a6f3e30652 fix: preserve Ticket lane order across pages 2026-08-18 07:50:42 +09:00
Hare 6ca5dfbe11 feat: paginate Ticket board lanes independently 2026-08-18 03:08:39 +09:00
Hare bc835b8503 feat: add bounded Ticket and Objective query pages 2026-08-18 03:08:30 +09:00
Hare 46767daf49 test: remove duplicated resource content assertions 2026-08-18 02:20:32 +09:00
Hare 99170d47ab fix: delegate queued tickets through merge 2026-08-18 02:20:32 +09:00
Hare 796fa2ee85 feat: integrate ticket ready target guards 2026-08-18 01:12:32 +09:00
Hare 200c24bc00 fix: avoid unbounded ticket board queries 2026-08-18 00:46:31 +09:00
Hare 0a2b24bf5e fix: ignore transient vite config bundles 2026-08-17 23:33:12 +09:00
Hare eec2be87ad feat: paginate ticket workflow lanes 2026-08-17 23:33:12 +09:00
Hare 71cd58f868 feat: scope merge request tools by profile flags 2026-08-17 22:53:09 +09:00
Hare 58ed04ac59 Merge branch 'orchestration' into develop 2026-08-17 21:50:21 +09:00
Hare c6a476d65d feat: derive ticket readiness from merge requests 2026-08-17 21:26:42 +09:00
Hare 4c31ea2228 fix: check queue state before local readiness 2026-08-17 14:59:24 +09:00
Hare f9e5fca67d fix: preserve intake and companion ticket workflows 2026-08-17 14:44:59 +09:00
Hare a2cd860199 feat: gate ticket readiness on validated targets 2026-08-17 14:23:47 +09:00
Hare f5fdce2d07 fix: migrate legacy merge request schema marker 2026-08-17 11:54:24 +09:00
Hare 8c60921c99 chore: merge orchestration into develop 2026-08-17 11:02:47 +09:00
Hare 956b453e6a fix: preserve long-running workdir requests 2026-08-17 11:01:33 +09:00
Hare 063f203efe merge: integrate selector-thread merge request authority 2026-08-17 10:34:01 +09:00
Hare 5f44b10ff9 fix: revalidate merge authority in completion transaction 2026-08-17 08:15:13 +09:00
Hare e3dc8ee327 fix: validate merge authority before ref updates 2026-08-17 08:04:33 +09:00
Hare 645458498a fix: fence merge request approval and grant lifecycle 2026-08-17 07:57:23 +09:00
Hare 6c4119e2c6 fix: separate merge request authority from thread projection 2026-08-17 07:46:48 +09:00
Hare 7e9cae5f39 fix: bound merge request thread bodies 2026-08-17 07:44:08 +09:00
Hare 1fe1b7463f fix: align merge requests with selector thread contract 2026-08-17 07:41:03 +09:00
Hare 9e48cae759 feat: expose selector based merge request threads 2026-08-17 07:09:20 +09:00
Hare aeb2727bea feat: replace merge request revision authority 2026-08-17 07:09:10 +09:00
Hare 298c20012a fix: bind relation and event query evidence 2026-08-17 06:57:29 +09:00
Hare 7507412f1c fix: query authoritative Ticket content and relations 2026-08-17 06:46:43 +09:00
Hare 45b7d0764d fix: complete query and workflow alias cutover 2026-08-17 06:35:24 +09:00
Hare 7508d428b0 docs: report MR target discovery blocker 2026-08-17 05:39:18 +09:00
Hare 977c8e7b21 fix: align read projections with query contracts 2026-08-17 05:37:06 +09:00
Hare 4964583868 feat: cut over Ticket and Objective read tools 2026-08-17 05:18:38 +09:00
Hare 14aa1aabea feat: add bounded Ticket and Objective read APIs 2026-08-17 05:18:27 +09:00
Hare 76c427c887 fix: remove redundant merge request diff digest 2026-08-17 04:13:14 +09:00
Hare ff7d874138 fix: rebuild merge request schema authority 2026-08-17 02:51:53 +09:00
Hare e881c8fad8 fix: remove speculative worker control delegation 2026-08-17 02:51:18 +09:00
Hare 06cc6056e5 chore: merge orchestration into develop 2026-08-17 01:09:51 +09:00
Hare c15999b7a6 fix: classify commit messages by change type 2026-08-17 01:09:12 +09:00
Hare 0b954c1ab6 fix: scope merge request foreign key checks 2026-08-17 01:09:05 +09:00
Hare eb0dd67d16 server: recover completed Worker transfers 2026-08-17 00:48:37 +09:00
Hare 97828f8bd5 server: fence Worker control operation identity 2026-08-17 00:38:48 +09:00
Hare 8be2cfd2a3 worker: unify granted Worker control 2026-08-17 00:18:49 +09:00
Hare f41ab0e277 worker: persist known-worker control grants 2026-08-16 23:08:32 +09:00
Hare 46a44b232b merge-request: normalize target observation refs 2026-08-16 21:03:30 +09:00
Hare 2cf4c57813 merge-request: verify guarded target updates 2026-08-16 21:03:30 +09:00
Hare 41534b215a merge-request: harden target update recovery 2026-08-16 21:03:30 +09:00
Hare 5ea2792df7 merge-request: finalize one guarded merge outcome 2026-08-16 21:03:30 +09:00
Hare 1479148f84 merge-request: select one final integration result 2026-08-16 21:03:30 +09:00
Hare 7256d80514 merge-request: preserve migration foreign keys 2026-08-16 21:03:30 +09:00
Hare 8e73d755d3 merge-request: harden latest schema migration 2026-08-16 21:03:30 +09:00
Hare 027f60d262 merge-request: add target and merge result authority 2026-08-16 21:03:30 +09:00
Hare 4f042cae84 tui: scope composer history under client data 2026-08-16 18:24:34 +09:00
Hare 0b8924eda7 merge-request: checkpoint restartable migration 2026-08-15 21:26:02 +09:00
Hare eaaf2f6dcc workdir: display working directory status 2026-08-15 21:26:02 +09:00
Hare f5a0e14991 docs: require root cargo check 2026-08-15 21:26:02 +09:00
Hare 11e4d536c5 ticket: support relation removal 2026-08-15 17:05:47 +09:00
Hare 0fd2486baf Merge ticket 00001M00PZS9R paused Worker Resume 2026-08-15 03:55:20 +09:00
Hare 8294a476d2 runtime: allow safe paused resume on orchestration 2026-08-15 03:49:53 +09:00
Hare 9922b654d7 Merge ticket 00001KZVPX841 workspace Workdir contract 2026-08-15 03:38:24 +09:00
Hare b910efd945 workdir: centralize workspace inventory contract 2026-08-15 03:29:53 +09:00
Hare 20854edca2 Merge ticket 00001KZ9SR97B notification projection 2026-08-15 02:57:46 +09:00
Hare 2a23a5d574 server: minimize ticket notification context 2026-08-15 02:34:28 +09:00
Hare 4cf34375a8 config: commit without preview 2026-08-15 02:06:46 +09:00
Hare 404809ab6e config: format sources before commit 2026-08-15 01:28:25 +09:00
Hare c5c89795e1 config: require schema assertion on main 2026-08-15 00:21:46 +09:00
Hare 99b08e0f0c web: protect config schema wrapper 2026-08-14 23:38:51 +09:00
Hare 83a99541b2 web: repair config source editor 2026-08-14 23:28:14 +09:00
Hare 1ed835fb79 Merge branch 'orchestration' into develop
# Conflicts:
#	web/workspace/deno.json
2026-08-14 14:49:01 +09:00
Hare ace134e2f0 runtime: deliver immutable prompt bundle on initial spawn 2026-08-14 14:24:59 +09:00
Hare ecbd003579 worker: track work as natural task steps 2026-08-14 14:23:58 +09:00
Hare 93e784a3ed prompt: route source assertions through effective catalog 2026-08-14 14:02:01 +09:00
Hare a1f6a6bad5 prompt: close whitespace-control include validation gap 2026-08-14 13:58:11 +09:00
Hare a6f92104fa server: project Workspace prompts into Worker config bundles 2026-08-14 13:45:14 +09:00
Hare 0ad7d6d210 worker: replace filesystem prompts with effective DCDL catalog 2026-08-14 13:45:03 +09:00
Hare 48ff977d06 config-source: validate static template catalog projections 2026-08-14 13:44:51 +09:00
Hare 93eea24420 web: show Worker tasks in Console 2026-08-14 12:46:59 +09:00
Hare e582babae3 runtime: avoid duplicate Notify observations 2026-08-14 12:46:49 +09:00
Hare 46ffde19a6 config-source: bind import cache keys to content 2026-08-14 12:06:10 +09:00
Hare 6446eb1302 server: project Skills from active virtual config 2026-08-14 11:55:33 +09:00
Hare ad0f6c68d5 config-source: project Markdown imports as values 2026-08-14 11:55:10 +09:00
Hare 6bcd59fcc6 test: cover Decodal 0.4 parity contracts 2026-08-14 11:00:50 +09:00
Hare 1fad5fc8ed config: migrate workspace evaluation to Decodal 0.4 2026-08-14 10:53:22 +09:00
Hare 5c57e10de9 web: link profiles to shared config editor 2026-08-14 10:03:36 +09:00
Hare c0f4e80320 server: preserve profile config authority at spawn 2026-08-14 09:54:11 +09:00
Hare 4857910410 web: retire profile-specific editor 2026-08-14 09:19:13 +09:00
Hare c2510495ef server: derive profiles from virtual config 2026-08-14 09:19:04 +09:00
Hare f8baa1edb7 server: compose Workspace config schemas 2026-08-14 05:38:21 +09:00
Hare 7a8bd7717e server: require main config entrypoint 2026-08-14 04:36:26 +09:00
Hare c98048b97b Merge branch 'work/00001KY8KRJKK-virtual-config-tree' into develop 2026-08-14 03:20:59 +09:00
Hare 38dad4e865 server: authorize orchestrator MR completion 2026-08-14 03:14:08 +09:00
Hare d039359386 web: refine workspace sidebar navigation 2026-08-14 02:20:50 +09:00
Hare 8c68129d69 web: reapply original changes after config conflict 2026-08-14 01:48:36 +09:00
Hare 348ac51011 config: add revision reads and conflict recovery 2026-08-14 01:41:23 +09:00
Hare 544abbbf56 config: enforce browser preflight and generated DTOs 2026-08-14 01:27:29 +09:00
Hare fa9bd8207f config: complete virtual tree editor contract 2026-08-14 01:07:14 +09:00
Hare 0a7e67e373 config: validate every Decodal source before commit 2026-08-14 00:45:20 +09:00
Hare 9cd1c1c448 runtime: update Decodal import loader test 2026-08-14 00:40:39 +09:00
Hare dfea679f0b web: update Decodal CodeMirror baseline 2026-08-14 00:36:39 +09:00
Hare 0689116e4d server: update schema migration expectations 2026-08-14 00:33:00 +09:00
Hare 02a09ae2d7 test: verify browser WASM config parity 2026-08-14 00:31:22 +09:00
Hare f9d328f2db worker: add typed feature services for coder spawn 2026-08-14 00:02:13 +09:00
Hare 8c6dcb9483 web: edit virtual config sources with WASM core 2026-08-13 22:34:56 +09:00
Hare c8b57a6a5d server: persist evaluated virtual config trees 2026-08-13 22:26:11 +09:00
Hare 7aa4d3067e config: add canonical Decodal source core 2026-08-13 22:13:33 +09:00
Hare e47eca53a2 Merge branch 'orchestration' into develop 2026-08-13 17:50:33 +09:00
Hare 8d061a8734 fix: guard orchestrator Coder assignment spawn 2026-08-13 17:50:27 +09:00
Hare 9c8ab6441c Merge branch 'work/00001KZVN5J0S-ticket-list-bulk-projection' into orchestration 2026-08-13 05:23:19 +09:00
Hare dfede080d2 ticket: deduplicate bulk relation blockers 2026-08-13 04:56:52 +09:00
Hare cf32d871de server: bulk project ticket list 2026-08-13 04:21:10 +09:00
Hare fe373b5656 runtime: remove embedded worker socket transport 2026-08-13 03:25:57 +09:00
Hare a44a4bc4f8 docs: record ticket audit and restart failures 2026-08-13 02:01:23 +09:00
Hare cb683beef8 dev: gate dogfood restarts with isolated smoke 2026-08-13 02:01:17 +09:00
Hare 1d4ffa875a runtime: restore persisted workers without adapter panic 2026-08-13 02:01:13 +09:00
Hare 297a7ddd9d merge: integrate orchestration merge request lifecycle
# Conflicts:
#	resources/flows/coder-review.dcdl
2026-08-12 18:30:08 +09:00
Hare be698c2239 Merge branch 'work/00001KZPQW4GJ-worker-remove-v3' into orchestration-merge-request-domain-final 2026-08-12 17:49:35 +09:00
Hare e80581d139 worker: preserve retry cleanup stage 2026-08-12 17:40:11 +09:00
Hare 4e7eaac7d5 worker: retry attachment cleanup stages 2026-08-12 17:31:29 +09:00
Hare 92f7f3fca3 Merge branch 'work/00001KZPQW4GJ-worker-remove-v3' into orchestration-merge-request-domain 2026-08-12 17:18:04 +09:00
Hare 1e10cdecc8 docs: report stale Flow verifier capture 2026-08-12 17:16:57 +09:00
Hare ce6b8f65cc Merge branch 'work/00001KZPQW4GJ-worker-remove-v3' into orchestration-merge-request-domain 2026-08-12 17:10:29 +09:00
Hare f60c2d5834 worker: resume failed removal operation 2026-08-12 17:09:39 +09:00
Hare 795f26fb51 Merge branch 'work/00001KZPQW4GJ-worker-remove-v3' into orchestration-merge-request-domain 2026-08-12 17:01:24 +09:00
Hare 8ae930c5fc worker: add guarded WorkerRemove lifecycle 2026-08-12 17:00:32 +09:00
Hare ebe0f93744 Merge branch 'work/00001KZRWSNNE-runtime-worker-source' into orchestration-merge-request-domain 2026-08-12 04:11:22 +09:00
Hare 8cc0aaf8d2 runtime: prove Worker mutation source authority 2026-08-12 04:03:09 +09:00
Hare 86be3a6865 Merge branch 'work/00001KZPQSFQD-worker-retention' into orchestration-merge-request-domain 2026-08-12 00:47:46 +09:00
Hare 5e5ce73fd0 runtime: harden retention reconciliation and retry 2026-08-12 00:46:39 +09:00
Hare 01971807cb Merge branch 'work/00001KZPQSFQD-worker-retention' into orchestration-merge-request-domain 2026-08-11 23:59:19 +09:00
Hare da8313fa1a runtime: add revisioned worker retention authority 2026-08-11 23:57:37 +09:00
Hare 09fd17e38b Merge branch 'work/00001KZPS59RK-worker-aggregate' into orchestration-merge-request-domain 2026-08-11 22:39:30 +09:00
Hare 34f8949e85 runtime: canonicalize Worker aggregates 2026-08-11 22:38:29 +09:00
Hare 33d3d1a43f Merge branch 'work/00001KZNCCD9C-merge-request-domain' into orchestration-merge-request-domain 2026-08-11 21:17:35 +09:00
Hare 1814c35701 feat: add merge request review authority 2026-08-11 20:21:37 +09:00
Hare 6df5fe5b2a flow: require coder work branch commits 2026-08-11 19:39:56 +09:00
Hare c292c01da3 fix: keep active workers visible in sidebar 2026-08-11 15:32:50 +09:00
Hare 133fbbe038 fix: keep reviewer routing owned by coder 2026-08-11 15:02:13 +09:00
Hare 7f0d025312 server: scope repository identity by workspace 2026-08-11 05:44:48 +09:00
Hare 9dccf99c50 ticket: own typed schema migrations 2026-08-11 05:00:40 +09:00
Hare 1d498d13c3 fix: remove secure-context websocket id dependency 2026-08-11 04:58:47 +09:00
Hare e88b0cda18 fix: restore production orchestrator spawn 2026-08-11 04:58:34 +09:00
Hare 8d2b8b690f fix: make image tool results durably prunable 2026-08-11 02:44:37 +09:00
Hare 38b8f26a50 feat: add scoped multimodal image attachments 2026-08-10 21:49:39 +09:00
Hare 64ced7dbad worker: make coder review routing durable 2026-08-10 02:01:08 +09:00
Hare b9dadb6a08 worker: support typed initial submit on spawn 2026-08-09 23:19:29 +09:00
Hare 068ba9afa5 flow: own worker flow state in runtime sessions 2026-08-09 18:04:32 +09:00
Hare c0532fda4e runtime: project granted worker sessions 2026-08-07 16:31:30 +09:00
Hare ff50baec99 worker: split session capture observation features 2026-08-07 16:31:15 +09:00
Hare a9bb806387 subworker: harden internal session lifecycle 2026-08-07 13:36:44 +09:00
Hare 8fe0525295 worker: exercise project reviewer internal spawn 2026-08-07 02:20:52 +09:00
Hare e6703ed18a worker: preserve prompt overrides in internal children 2026-08-07 02:15:00 +09:00
Hare ee75272917 worker: materialize legacy child cleanup only when needed 2026-08-07 02:05:43 +09:00
Hare 620ecbafcb worker: cover legacy sub-worker restore cleanup 2026-08-07 02:04:42 +09:00
Hare cf394403a6 worker: retire process sub-worker registry authority 2026-08-07 02:03:09 +09:00
Hare 8f0d7fa3c0 worker: revoke parent writes before child run 2026-08-07 01:54:31 +09:00
Hare cc7266c801 worker: cover parent teardown scope reclaim 2026-08-07 01:52:07 +09:00
Hare e0ac732769 worker: verify internal sub-worker scope reclaim 2026-08-07 01:48:25 +09:00
Hare c79db24016 worker: run sub-workers as internal sessions 2026-08-07 01:44:04 +09:00
Hare 485918ebe3 worker: route sub-worker tools through internal sessions 2026-08-06 23:15:30 +09:00
Hare d9f399b97b worker: add internal worker session actor 2026-08-06 22:57:42 +09:00
Hare b8a5c60ff9 server: diagnose and fix worker spawn failures 2026-08-06 22:39:24 +09:00
Hare 2d4b93dde7 worker: cover cancelled memory extraction caller 2026-08-06 22:02:57 +09:00
Hare bd893f271a worker: treat rolled-back extraction as cancelled 2026-08-06 09:49:48 +09:00
Hare 2c8e617b2a worker: run internal extraction through Worker 2026-08-06 08:54:40 +09:00
Hare 8207e560e9 worker: compensate spawn finalize failures 2026-08-06 07:45:18 +09:00
Hare 22b6f4e71d worker: allow companion to manage workers 2026-08-05 23:20:38 +09:00
Hare 5c5921fcd2 docs: report LAN websocket UUID failure 2026-08-05 21:31:46 +09:00
Hare a2781f57e9 worker: structure runtime worker identities 2026-08-05 21:26:55 +09:00
Hare fd391ef705 fix: recover partial session log writes 2026-08-05 18:15:49 +09:00
Hare 36df79e561 runtime: allow cross-runtime workdir sessions 2026-08-05 16:02:16 +09:00
Hare 636dc14616 web: refresh worker sidebar snapshots 2026-08-05 05:46:06 +09:00
Hare fb115fbb7e worker: unify workdir attachments 2026-08-05 05:30:58 +09:00
Hare ba009c0a20 worker: separate subworkers from workspace workers 2026-08-05 03:36:59 +09:00
Hare 50726e4cf3 web: show system items in worker console 2026-08-05 03:36:50 +09:00
Hare f98a123e40 runtime: route notifications through worker inbox 2026-08-05 01:44:57 +09:00
Hare dd2ca54874 web: launch embedded workspace orchestrator 2026-08-04 19:52:54 +09:00
Hare da90ac74b4 worker: add workspace workdir management feature 2026-08-04 19:28:59 +09:00
Hare e6a2da548f fs: extract provider operations into shared crate 2026-08-04 02:03:22 +09:00
Hare e5f0c4168f workdir: add authenticated runtime session transport 2026-08-03 23:37:15 +09:00
Hare 05e8b00bf0 workdir: separate identity from worker session 2026-08-03 18:12:47 +09:00
Hare 0ffaa6c741 workspace: remove worker credential refresh flow 2026-08-03 17:08:23 +09:00
Hare ddadc830ac workdir: add network-capable operation boundary 2026-08-03 16:14:01 +09:00
Hare 0fa36395e7 web: show worker status in sidebar 2026-08-02 04:18:16 +09:00
Hare 606cd5fa31 web: subscribe console on route changes 2026-08-02 03:43:53 +09:00
Hare e5f3c20f64 server: restore weak workspace web access 2026-08-02 03:24:54 +09:00
Hare e530150e43 auth: bootstrap legacy workspace ownership 2026-08-02 00:26:28 +09:00
Hare 0f9f06048a runtime: remove legacy event polling authority 2026-08-01 22:55:58 +09:00
Hare 24f7267d55 web: share workspace multiplexer with console 2026-08-01 21:07:45 +09:00
Hare 11f26a1090 server: multiplex worker protocol subscriptions 2026-08-01 21:07:45 +09:00
Hare 72cef5ed9e web: subscribe sidebar to workspace workers 2026-08-01 20:12:27 +09:00
Hare b977c4cbad server: stream workspace worker subscriptions 2026-08-01 20:12:27 +09:00
Hare 5d4deb258a server: expose subscription runtime catalog 2026-08-01 19:34:50 +09:00
Hare f46c82d171 server: broker embedded runtime subscriptions 2026-08-01 19:23:49 +09:00
Hare 42c69f9f6c protocol: identify workspace subscription runtimes 2026-08-01 19:11:41 +09:00
Hare 9308f93de7 server: broker runtime event subscriptions 2026-08-01 19:04:05 +09:00
Hare ecd5751a67 docs: report spawn worker delegation scope 2026-08-01 18:34:32 +09:00
Hare ec262f0238 runtime: serve selective event subscriptions 2026-08-01 18:34:32 +09:00
Hare 21cd672f64 protocol: define multiplexer subscriptions 2026-08-01 18:34:32 +09:00
Hare 9dfcddf40b docs: report spawned worker launcher mismatch 2026-08-01 17:24:10 +09:00
Hare 81e631e640 auth: enforce workspace worker credentials over ticket REST 2026-08-01 17:23:59 +09:00
Hare 3412f1c0ed merge: integrate ticket assignment notifications
# Conflicts:
#	crates/workspace-server/src/store.rs
2026-07-31 23:59:09 +09:00
Hare 48556e1a2c feat: add workspace breadcrumbs 2026-07-31 23:48:46 +09:00
Hare 06a98fe30c workdir: report current selector and ref 2026-07-31 23:48:46 +09:00
Hare 4cf110b28e runtime: replay Worker creation before workdir conflicts 2026-07-31 23:28:07 +09:00
Hare df34d43a23 server: close Ticket lifecycle crash gaps 2026-07-31 23:12:05 +09:00
Hare e9a6269d9f server: address Ticket orchestration review 2026-07-31 22:15:55 +09:00
Hare 005f6cb498 server: route Ticket mutation notifications 2026-07-31 20:15:11 +09:00
Hare 32d3f8f75e Merge branch 'merge/00001KYRRDVH9-ticket-panel' into develop 2026-07-31 02:54:15 +09:00
Hare cb4b588598 fix: remove companion filter from worker list 2026-07-31 02:53:36 +09:00
Hare 20a0f7a454 merge: integrate ticket panel workflow 2026-07-31 02:22:49 +09:00
Hare e720af38a6 workspace: add ticket panel workflow 2026-07-31 01:12:10 +09:00
Hare 1c2d284578 workspace: add typed Ticket API and targets 2026-07-30 22:13:01 +09:00
Hare 3e217adc14 feat: profile解決とmodel catalogを更新 2026-07-30 22:12:25 +09:00
Hare d94ef81b43 runtime: bind workspaces to issuer 2026-07-30 13:42:53 +09:00
Hare ac6c8b275d runtime: require http auth 2026-07-30 13:05:57 +09:00
Hare 3dda06cbe3 runtime: scope worker access by workspace 2026-07-30 00:25:46 +09:00
Hare 0ff8a95da3 docs: mention trybuild policy 2026-07-29 23:18:09 +09:00
Hare be7a96a825 docs: add rust testing strategy 2026-07-29 23:05:10 +09:00
Hare 7265041e55 objective: add mutation tools 2026-07-29 21:58:01 +09:00
Hare 0b64eab148 build: enable runtime server features by default 2026-07-29 19:57:59 +09:00
Hare fb285b17e4 build: rename server runtime binaries 2026-07-29 19:36:05 +09:00
Hare 699290ccb1 cli: support panel restore list 2026-07-29 19:15:57 +09:00
Hare 406104babd cli: update yoi help 2026-07-29 18:44:08 +09:00
Hare 297c56c72d cli: configure target defaults 2026-07-29 18:26:22 +09:00
Hare 8ec940f624 merge: bound task tool output 2026-07-29 16:53:57 +09:00
Hare cbbc860366 cli: route worker lists through targets 2026-07-29 16:04:24 +09:00
Hare acc7281414 runtime: filter stopped workers 2026-07-29 04:27:04 +09:00
Hare bffbe6b551 fix: simplify task item output 2026-07-29 02:36:14 +09:00
Hare b6f83d81bb fix: bound task tool output 2026-07-29 02:29:15 +09:00
Hare 98c1599d1a cli: introduce connection target abstraction 2026-07-29 02:18:02 +09:00
Hare 450e0cddbd prompt: preserve feature instruction order 2026-07-28 22:00:16 +09:00
Hare 44e7014d83 prompt: derive guidance from features 2026-07-28 21:30:06 +09:00
Hare 9125cee6fd prompt: update ticket guidance 2026-07-28 20:58:19 +09:00
Hare 7a1b5e97c1 refactor: make runtime worker state authoritative 2026-07-28 19:21:09 +09:00
Hare 6114cc9018 fix: read secrets from legacy data dir 2026-07-28 04:12:26 +09:00
Hare 5d1950647e fix: keep in-flight cleanup internal 2026-07-27 16:38:47 +09:00
Hare 1dc6429b87 fix: clear stale in-flight state 2026-07-27 15:54:08 +09:00
Hare e20c8a1d0b docs: document runtime auth setup 2026-07-27 02:41:02 +09:00
Hare 3cb056c523 fmt: format runtime auth changes 2026-07-27 01:43:17 +09:00
Hare 55204478c6 fmt: format merged cli changes 2026-07-27 01:43:08 +09:00
Hare 0f2289c539 merge: ticket edit partial replacement 2026-07-27 01:40:54 +09:00
Hare 20dcf429d4 merge: runtime auth 2026-07-27 01:38:58 +09:00
Hare 9a14f1b6fc fix: require explicit runtime trust replacement 2026-07-26 23:18:51 +09:00
Hare 1378581940 ticket: add exact body replacement edits 2026-07-26 20:46:06 +09:00
Hare d994268a6b feat: add runtime trust capability auth 2026-07-26 20:45:52 +09:00
Hare 006762f900 worker: separate display metadata 2026-07-26 17:45:46 +09:00
Hare ff905d4a22 memory: reuse consolidation worker 2026-07-26 17:08:29 +09:00
Hare 3369dbd1eb web: add memory document view 2026-07-26 16:45:12 +09:00
Hare a5d207821d memory: simplify document consolidation tools 2026-07-26 16:18:07 +09:00
Hare e751a11a92 memory: route staging lifecycle through sqlite authority 2026-07-26 15:44:51 +09:00
Hare faaf258a96 merge: sqlite memory tools 2026-07-26 15:23:24 +09:00
Hare 23e47e6097 feat: connect memory tools to workspace authority 2026-07-26 15:17:48 +09:00
Hare 386152749a merge: sqlite memory authority 2026-07-26 14:29:28 +09:00
Hare 82ffc14d65 workspace: add sqlite memory authority 2026-07-26 14:21:27 +09:00
Hare 0eb840ab4b objective: remove one-shot import 2026-07-26 12:47:42 +09:00
Hare e653f8f08b workspace: introduce authority abstraction 2026-07-26 12:20:18 +09:00
Hare 5b1b0688bc objective: move records to sqlite authority 2026-07-26 11:10:00 +09:00
Hare 18b5cead7a objective: add read tools 2026-07-26 02:21:22 +09:00
Hare 2200f60b94 ticket: plan objective tools 2026-07-26 02:06:08 +09:00
Hare e997aa2fc6 memory: gate staging tools by profile 2026-07-25 10:56:27 +09:00
Hare a44673fa6b memory: consolidate staging through queue tools 2026-07-25 09:17:08 +09:00
Hare 4de801f8d0 runtime: avoid profile archive during restore 2026-07-24 21:04:12 +09:00
Hare 7caf6cd6e6 script: migrate workdir layout 2026-07-24 19:01:09 +09:00
Hare 1d64618b4a runtime: simplify workdir layout 2026-07-24 18:37:59 +09:00
Hare 6b824d9018 web: remove unused tailwind import 2026-07-24 18:16:51 +09:00
Hare b22f7d06e7 web: simplify font fallbacks 2026-07-24 18:07:31 +09:00
Hare 54bb7209a4 style: format web workspace 2026-07-24 17:54:16 +09:00
Hare 1c2cb01882 web: split app css by feature 2026-07-24 17:47:25 +09:00
Hare 51e2b721ff web: add ibm plex mono font 2026-07-24 16:14:35 +09:00
Hare 862f8f7f98 web: make running composer stoppable 2026-07-24 15:53:02 +09:00
Hare 342c3dabb7 web: use gen interface font 2026-07-24 15:28:31 +09:00
Hare f7482d6151 runtime: dry-check worker restore 2026-07-24 15:17:53 +09:00
Hare b8cc58ac29 web: expose memory staging view 2026-07-24 14:10:52 +09:00
Hare b9067a8110 web: align ticket table with panel order 2026-07-24 12:46:17 +09:00
Hare 7a28395d75 web: theme ticket table 2026-07-24 11:20:23 +09:00
Hare d3d2b28adc runtime: simplify worker lifecycle 2026-07-24 11:07:04 +09:00
Hare e0b092dbc8 workdir: project occupancy from links 2026-07-24 09:29:25 +09:00
Hare b1570aba63 web: add sortable ticket table 2026-07-24 08:56:36 +09:00
Hare 4ff599c011 server: use single XDG server database 2026-07-24 08:45:51 +09:00
Hare 19d5396897 migrate: move workspace data to XDG SQLite stores 2026-07-24 08:45:42 +09:00
Hare e975c648c2 web: move sidebar fold into frame 2026-07-23 21:59:47 +09:00
Hare 60460b23dc web: make sidebar fold button visible 2026-07-23 21:19:06 +09:00
Hare 62c1e4303b web: move sidebar chrome css out of app 2026-07-23 21:09:44 +09:00
Hare 97397a1c4d web: keep sidebar fold button visible 2026-07-23 20:57:02 +09:00
Hare 6e53df0303 web: rename sidebar collapse to fold 2026-07-23 20:50:30 +09:00
Hare f848a96343 web: keep sidebar collapse local 2026-07-23 20:45:58 +09:00
Hare fb4d3c3f1f web: register sidebar snippets from layouts 2026-07-23 20:01:54 +09:00
Hare b3854004a1 web: restore root sidebar chrome 2026-07-23 19:47:11 +09:00
Hare 308e1ffdbc web: add global sidebar fallback 2026-07-23 19:23:02 +09:00
Hare 2bd69f9403 web: scope sidebar to workspace routes 2026-07-23 19:12:50 +09:00
Hare 61b1735292 web: simplify header chrome 2026-07-23 18:49:36 +09:00
Hare 11663830e3 web: move account nav to header 2026-07-23 18:46:43 +09:00
Hare 2285277060 fix: align account UI actor shape 2026-07-23 18:35:04 +09:00
Hare cd6468bb92 fix: send browser origin for passkey options 2026-07-23 18:03:22 +09:00
Hare 28304f13c3 fix: honor browser origin for passkey ceremonies 2026-07-23 17:54:51 +09:00
Hare 7740191194 web: add account passkey login UI 2026-07-23 03:14:43 +09:00
Hare 7dda898830 web: add workspace ticket routes 2026-07-23 02:44:20 +09:00
Hare 681034db1e merge: account passkey login flow 2026-07-23 02:08:56 +09:00
Hare 554a784639 backend: verify passkey ceremonies 2026-07-23 02:01:28 +09:00
Hare 026e4cf90b docs: record backend auth model 2026-07-23 01:14:24 +09:00
Hare 4f8a2357a5 cli: add backend device login 2026-07-23 01:11:07 +09:00
Hare ba0289b820 backend: add passkey auth api 2026-07-23 01:05:40 +09:00
Hare ed8110ae45 backend: add account auth store schema 2026-07-23 00:57:45 +09:00
Hare 41da9c91b2 docs: record workspace runtime docker boundary 2026-07-23 00:03:46 +09:00
Hare 44deacb3f4 fix: remove workdir management kind 2026-07-22 20:52:09 +09:00
Hare fe2a39c12d fix: async workspace memory backend 2026-07-22 19:44:52 +09:00
Hare aa542b38d9 feat: add local image compose setup 2026-07-22 19:09:17 +09:00
Hare c1ee1ff9e9 feat: build docker images with nix 2026-07-22 18:43:35 +09:00
Hare a8236ff3b4 feat: add docker image targets 2026-07-22 18:03:03 +09:00
Hare c75baacd9b chore: untrack yoi tickets 2026-07-22 17:09:14 +09:00
Hare a8c27f5752 fix: remove console composer click shell 2026-07-22 16:55:28 +09:00
Hare 1ff02151b8 fix: relativize web console tool paths 2026-07-22 16:23:39 +09:00
Hare c7c838b4e5 fix: filter web timeline assistant marks 2026-07-22 16:08:45 +09:00
Hare ad93047a25 fix: handle web console segment rotation 2026-07-22 15:37:02 +09:00
Hare b9f4c06c68 fix: share protocol frame codec 2026-07-22 14:03:33 +09:00
Hare 945716d010 fix: share worker protocol session logic 2026-07-22 12:51:19 +09:00
Hare a164017432 fix: bridge worker log events to protocol 2026-07-22 11:54:44 +09:00
Hare fdf1f43281 fix: echo protocol run inputs 2026-07-22 11:11:53 +09:00
Hare 8aafd388fa fix: proxy backend protocol websocket frames 2026-07-21 20:42:49 +09:00
Hare 8841d063be fix: unify worker protocol websocket 2026-07-21 20:29:30 +09:00
Hare 70a26a3042 feat: route backend worker controls over protocol 2026-07-21 19:33:24 +09:00
Hare bfa9346de2 ticket: target protocol worker controls 2026-07-21 18:47:17 +09:00
Hare c9c1d0bb72 ticket: scope backend worker protocol controls 2026-07-21 18:42:25 +09:00
Hare 58e9fd17cc ticket: close backend worker picker 2026-07-21 18:16:38 +09:00
Hare 4a08b69b4c fix: align backend worker picker style 2026-07-21 18:12:33 +09:00
Hare 2e2d7b7290 fix: expose runtime worker list endpoint 2026-07-21 18:04:14 +09:00
Hare f79892baef feat: surface backend runtime workers in tui 2026-07-21 17:41:50 +09:00
Hare 2b307b8040 merge: worker workspace authority api 2026-07-21 15:45:01 +09:00
Hare 06d4adf198 Update AGENTS.md 2026-07-21 15:34:17 +09:00
Hare 00d6c3a7c4 fix: remove direct worker local workspace discovery 2026-07-21 12:07:38 +09:00
Hare 1251edae04 feat: route worker workspace access through backend authority 2026-07-21 11:21:13 +09:00
Hare 2572dde691 feat: add workspace memory backend for embedded workers 2026-07-21 09:27:28 +09:00
Hare 2e0cd3d161 Merge branch 'work/ticket-access-capabilities' into develop 2026-07-21 06:28:41 +09:00
Hare 8a3c7b4191 Update .gitignore 2026-07-21 06:25:37 +09:00
Hare 7f7d2fe7fc ticket: use boolean ticket capabilities 2026-07-21 06:13:26 +09:00
Hare 064965d350 ticket: collapse ticket access into one feature 2026-07-20 19:51:46 +09:00
Hare 2c01e7672b ticket: split ticket feature access presets 2026-07-20 19:05:55 +09:00
Hare a40d9c2027 ticket: share workspace actionable projection 2026-07-20 17:42:20 +09:00
Hare 556adb429c ticket: use list state tokens in query 2026-07-20 17:16:40 +09:00
Hare 39be7a5a0a ticket: merge TicketListQuery implementation 2026-07-20 17:09:17 +09:00
Hare 0a5270a2cc ticket: update list query semantics 2026-07-20 15:45:53 +09:00
Hare edc495ac01 merge: work/default-ticket-tools 2026-07-20 11:36:12 +09:00
Hare 156dbfda64 dev: harden workspace restart scheduling 2026-07-20 11:35:22 +09:00
Hare 18d9b96cac runtime: avoid ticket backend blocking panic 2026-07-20 09:45:39 +09:00
Hare 2b0901eb62 runtime: avoid websocket runtime drop panic 2026-07-20 08:45:13 +09:00
Hare 1173e3af38 runtime: report adapter task panics 2026-07-19 00:37:53 +09:00
Hare 23234b96ca profile: inherit ticket tools across roles 2026-07-18 21:59:58 +09:00
Hare 5f651755d8 runtime: preserve workdirs across worker deletion 2026-07-18 21:49:19 +09:00
Hare de3416cf3b dev: document workspace process switcher 2026-07-18 19:10:51 +09:00
Hare 76f35a7126 dev: detach workspace process actions 2026-07-18 17:41:09 +09:00
Hare 5e91f98ae0 dev: enable default ticket tools and workdir helpers 2026-07-18 17:32:46 +09:00
Hare 60410f29a1 ticket: plan backend runtime worker list 2026-07-18 11:46:39 +09:00
Hare 7e43c10e2d worker: implement session explore extract worker 2026-07-18 10:35:59 +09:00
Hare 92a825fd15 worker: reuse session reference for compaction reads 2026-07-18 09:03:06 +09:00
Hare 2dd9ef95dd worker: add session reference view 2026-07-18 08:27:42 +09:00
Hare 39fa8827da ticket: add session reference view 2026-07-18 08:15:05 +09:00
Hare 37c44a7942 Update workspace.toml 2026-07-18 07:49:35 +09:00
Hare 62dbed8075 worker: rename internal worker purpose to slug 2026-07-18 06:11:44 +09:00
Hare 88b91a2c55 worker: add internal worker runner 2026-07-18 05:59:02 +09:00
Hare ff04becfab ticket: add internal worker runner 2026-07-18 05:47:48 +09:00
Hare 2352f34c4e memory: implement flat extract staging 2026-07-18 05:46:56 +09:00
Hare 444e6bee42 ticket: define flat memory extract staging 2026-07-18 04:34:28 +09:00
Hare 7c1fb65947 Update AGENTS.md 2026-07-18 03:51:43 +09:00
Hare c5eb28af75 ticket: close staging source anchors work 2026-07-17 04:45:45 +09:00
Hare 9a1a75de48 merge: staging source anchors 2026-07-17 04:44:20 +09:00
Hare d0e514704e ticket: approve staging source anchors implementation 2026-07-17 04:44:11 +09:00
Hare c34a50f7c9 ticket: record staging source anchors implementation 2026-07-17 04:41:00 +09:00
Hare 31798fb285 feat: add staging entry source anchors 2026-07-17 04:39:43 +09:00
Hare 08c4547a2e ticket: accept staging source anchors work 2026-07-17 04:28:08 +09:00
Hare 5aa88f7d0d ticket: queue 00001KXNYXNM6 2026-07-17 04:26:52 +09:00
Hare a9c86297aa merge: sync orchestration before queue 00001KXNYXNM6 2026-07-17 04:26:52 +09:00
Hare 594e4140bf ticket: split memory extract implementation 2026-07-17 04:26:50 +09:00
Hare 65dc67a7a1 prompt: add progress message guidance 2026-07-17 01:49:10 +09:00
Hare 8163c54a44 ticket: plan memory extract improvements 2026-07-17 00:50:43 +09:00
Hare 57bd5a5902 ticket: close agent skills work 2026-07-16 09:15:13 +09:00
Hare 1611e04d17 merge: agent skills support 2026-07-16 09:11:07 +09:00
Hare 888ec11455 ticket: approve agent skills implementation 2026-07-16 09:11:00 +09:00
Hare 3d5c24cc4c ticket: record agent skills review fix 2026-07-16 09:07:45 +09:00
Hare 4ddfccee2d fix: reject unsupported skill fields 2026-07-16 09:06:45 +09:00
Hare 85153cf8a0 ticket: record agent skills review blockers 2026-07-16 08:53:18 +09:00
Hare a92457ea05 ticket: record agent skills implementation 2026-07-16 08:46:52 +09:00
Hare 62ef89a163 feat: add workspace-backed agent skills 2026-07-16 08:41:10 +09:00
Hare 1abf56dbc2 objective: revise memory knowledge skills architecture 2026-07-16 08:38:33 +09:00
Hare 9e0f8e9aad objective: draft memory architecture overview 2026-07-16 08:15:39 +09:00
Hare 05c50e32cf ticket: accept agent skills work 2026-07-16 08:01:35 +09:00
Hare 076e01adbb ticket: close knowledge removal work 2026-07-16 08:00:28 +09:00
Hare f279eb11e8 merge: remove knowledge support 2026-07-16 07:57:16 +09:00
Hare d4665ee8e5 ticket: approve knowledge removal implementation 2026-07-16 07:57:07 +09:00
Hare 8681cfa063 ticket: record knowledge docs fix 2026-07-16 07:55:27 +09:00
Hare 9f527f5ea2 fix: remove stale report knowledge wording 2026-07-16 07:54:35 +09:00
Hare fae9bbe84a ticket: record knowledge docs review blocker 2026-07-16 07:53:26 +09:00
Hare ff8e3c1114 ticket: record knowledge hash completion fix 2026-07-16 07:51:05 +09:00
Hare 20654f9c40 fix: disable hash console completions 2026-07-16 07:50:13 +09:00
Hare da912980fd objective: add sensemaking process reference 2026-07-16 07:47:00 +09:00
Hare 63676b9ae3 ticket: record knowledge hash completion blocker 2026-07-16 07:44:53 +09:00
Hare 4f5cc1e884 ticket: record knowledge guidance fix 2026-07-16 07:41:31 +09:00
Hare ad66650369 fix: remove stale knowledge guidance 2026-07-16 07:40:32 +09:00
Hare 09230633a5 ticket: record knowledge removal review blockers 2026-07-16 07:35:48 +09:00
Hare 149497b823 objective: align memory records with skills direction 2026-07-16 07:34:24 +09:00
Hare ca10a130a7 ticket: record knowledge removal implementation 2026-07-16 07:31:24 +09:00
Hare f786e01997 feat: remove active knowledge support 2026-07-16 07:30:00 +09:00
Hare f2106407be ticket: accept knowledge removal work 2026-07-16 06:40:32 +09:00
Hare 66b3a38f7d ticket: close workflow removal work 2026-07-16 06:39:31 +09:00
Hare 2f260029d4 merge: remove workflow machinery
# Conflicts:
#	.yoi/tickets/00001KXKJGYGD/item.md
#	.yoi/tickets/00001KXKJGYGD/thread.md
2026-07-16 06:35:48 +09:00
Hare 7cd5585a4e ticket: approve workflow removal implementation 2026-07-16 06:35:35 +09:00
Hare 9dc27a10bb ticket: record workflow tui test fix 2026-07-16 06:32:55 +09:00
Hare bc48094dde fix: update workflow-free tui tests 2026-07-16 06:32:07 +09:00
Hare ad1cbbc77f ticket: hold skills support for removal prerequisites 2026-07-16 06:27:03 +09:00
Hare e0f14d402e ticket: queue 00001KXKMX0QM 2026-07-16 06:26:15 +09:00
Hare d64a42125f merge: sync orchestration before queue 00001KXKMX0QM 2026-07-16 06:26:15 +09:00
Hare 5030888cb5 ticket: record workflow snapshot test blocker 2026-07-16 06:25:48 +09:00
Hare 2bd3ccd36c ticket: record workflow completion fix 2026-07-16 06:23:31 +09:00
Hare 0b56052a44 fix: remove workflow completion surface 2026-07-16 06:22:41 +09:00
Hare 0e51461ab6 ticket: ready agent skills support 2026-07-16 06:17:10 +09:00
Hare 5c79bc7609 ticket: record workflow completion review blocker 2026-07-16 06:10:20 +09:00
Hare 21296a10df ticket: add agent skills references 2026-07-16 06:08:16 +09:00
Hare f772977784 ticket: record workflow removal fix 2026-07-16 06:07:05 +09:00
Hare d30dca2d99 fix: remove remaining workflow invoke surfaces 2026-07-16 06:04:19 +09:00
Hare 7a71d9c114 ticket: require workspace skills api 2026-07-16 06:02:43 +09:00
Hare 6d9885aa5d ticket: record workflow removal review blockers 2026-07-16 05:53:09 +09:00
Hare 88f8796cdc ticket: record workflow removal implementation 2026-07-16 05:46:25 +09:00
Hare d801b2698b refactor: remove workflow machinery 2026-07-16 05:45:24 +09:00
Hare 1676018ce7 ticket: make workspace skills authority 2026-07-16 05:43:51 +09:00
Hare a8ac4cc56a ticket: hold knowledge removal for workflow cleanup 2026-07-16 05:27:58 +09:00
Hare 2417ac1960 ticket: queue 00001KXKP2A71 2026-07-16 05:27:03 +09:00
Hare 74f02a0e58 merge: sync orchestration before queue 00001KXKP2A71 2026-07-16 05:27:02 +09:00
Hare 2b73cbfbce ticket: plan knowledge removal before skills 2026-07-16 05:04:54 +09:00
Hare 724fc037ed ticket: require removing skill projection extensions 2026-07-16 04:58:46 +09:00
Hare 29db1b6270 ticket: record current skills support 2026-07-16 04:56:55 +09:00
Hare 83ad7506d7 ticket: accept workflow removal work 2026-07-16 04:55:47 +09:00
Hare 6ce8fdb578 ticket: queue 00001KXKJGYGD 2026-07-16 04:54:36 +09:00
Hare b62946845f ticket: implement skills 2026-07-16 04:54:33 +09:00
Hare e3f4fdb478 Create ticket.config.toml 2026-07-16 04:27:57 +09:00
Hare dec678e9b4 ticket: ready workflow removal skills migration 2026-07-16 04:27:18 +09:00
Hare f32496286e merge: workspace ticket settings 2026-07-16 04:03:53 +09:00
Hare a8f7ea9aed ticket: replace workflow tracking with skills 2026-07-16 04:03:06 +09:00
Hare 3679362f0f ticket: close workspace ticket settings work 2026-07-16 02:51:38 +09:00
Hare 45783b7488 merge: workspace ticket settings 2026-07-16 02:45:52 +09:00
Hare 05cf6e883f ticket: approve workspace ticket settings implementation 2026-07-16 02:45:40 +09:00
Hare 884ced7ecb ticket: record workspace ticket settings fix 2026-07-16 02:43:12 +09:00
Hare 40f2114541 tui: use configured ticket root for overlay 2026-07-16 02:42:29 +09:00
Hare f5c340a120 ticket: record workspace ticket settings review blocker 2026-07-16 02:26:32 +09:00
Hare 1473e874a8 ticket: record workspace ticket settings implementation 2026-07-16 02:20:11 +09:00
Hare b1e3a2ad33 ticket: move ticket settings into workspace config 2026-07-16 02:19:04 +09:00
Hare 7f9b6c01b5 build: update cargo hash after llm engine merge 2026-07-16 01:47:33 +09:00
Hare 88c2edefd4 merge: prepare llm engine for publish 2026-07-16 01:45:09 +09:00
Hare ed825db4e9 ticket: plan workspace orchestrator workdir tools 2026-07-16 01:31:01 +09:00
Hare c68ed1fdc5 ticket: accept workspace ticket settings work 2026-07-16 01:30:44 +09:00
Hare 5c8a7f363c ticket: close completed workspace cleanup items 2026-07-16 01:28:54 +09:00
Hare 16063c636d ticket: route workspace ticket settings work 2026-07-16 01:22:57 +09:00
Hare 7efe13747a ticket: queue 00001KXK9507N 2026-07-16 01:19:31 +09:00
Hare 724a5da67b ticket: plan workspace ticket settings consolidation 2026-07-16 01:19:19 +09:00
Hare 983ffe6017 feat: route ticket tools through workspace backend 2026-07-16 01:18:13 +09:00
Hare 66abd53e51 feat: refine workspace console ui 2026-07-15 22:43:56 +09:00
Hare f9f1f85b07 feat: add worker console timeline 2026-07-15 02:46:45 +09:00
Hare 839fc7b40c refactor: fold provider crate into engine 2026-07-15 00:58:29 +09:00
Hare e298856c85 feat: add web console commands 2026-07-14 07:55:51 +09:00
Hare 520c10d807 ui: refine worker console streaming 2026-07-14 04:54:23 +09:00
Hare 1505c5e8a3 docs: generalize llm-engine comments 2026-07-14 04:14:58 +09:00
Hare ddbcd595ef ticket: close runtime snapshot fix 2026-07-14 02:59:59 +09:00
Hare 6ca0d48327 fix: use live worker observation snapshots 2026-07-14 02:59:52 +09:00
Hare ec951ee5c0 ticket: start runtime snapshot fix 2026-07-14 02:48:47 +09:00
Hare de93d4c3b7 ticket: use live worker snapshots 2026-07-14 02:48:47 +09:00
Hare 1b99b3b4d2 chore: remove "nix build" instruction for development 2026-07-13 23:58:36 +09:00
Hare 1837865b33 runtime: restore from metadata snapshot 2026-07-13 23:56:16 +09:00
Hare bedf087455 ticket: start restore profile decoupling 2026-07-13 23:45:04 +09:00
Hare f93e734c57 ticket: restore without profile fetch 2026-07-13 23:45:03 +09:00
Hare 2e66655652 workspace: render console snapshot entries 2026-07-13 23:30:48 +09:00
Hare bbb79afdd8 ticket: start console snapshot rendering 2026-07-13 23:18:30 +09:00
Hare cdf46bd8eb ticket: render console snapshot entries 2026-07-13 23:18:30 +09:00
Hare 34856b9900 workspace: stop worker before cleanup delete 2026-07-13 23:05:46 +09:00
Hare f5b200d36b ticket: start worker cleanup stop 2026-07-13 22:58:54 +09:00
Hare 9c3677ff67 ticket: stop worker before cleanup delete 2026-07-13 22:58:54 +09:00
Hare 498337317c workspace: stabilize cleanup plan digest 2026-07-13 22:38:35 +09:00
Hare 655cdf9533 ticket: start cleanup plan stabilization 2026-07-13 22:30:39 +09:00
Hare 1b9d8c91c3 ticket: stabilize cleanup plan ordering 2026-07-13 22:30:39 +09:00
Hare 59524679c1 workspace: type workdir cleanup status 2026-07-13 21:57:20 +09:00
Hare daa06f98fb ticket: start typed workdir cleanup 2026-07-13 21:46:05 +09:00
Hare 2061c810db ticket: type workdir cleanup status 2026-07-13 21:46:05 +09:00
Hare 80a84b854c ticket: close completed runtime work 2026-07-13 21:45:11 +09:00
Hare f88ee692c9 workspace: allow not-found workdir cleanup 2026-07-13 20:54:33 +09:00
Hare b583af4dd3 ticket: start not-found workdir cleanup 2026-07-13 20:44:18 +09:00
Hare 81ceb1ceff ticket: allow not-found workdir cleanup 2026-07-13 20:44:18 +09:00
Hare da0fe7c81f runtime: preserve typed workdir errors 2026-07-13 20:17:09 +09:00
Hare 72c7beb9c7 ticket: start workdir error preservation 2026-07-13 19:59:02 +09:00
Hare 490d5ed674 ticket: preserve typed workdir errors 2026-07-13 19:59:02 +09:00
Hare 60c772ec38 workspace: show backend error details 2026-07-13 19:51:28 +09:00
Hare fb0d5aeaa9 ticket: start backend error details 2026-07-13 19:46:30 +09:00
Hare ec4b404580 ticket: show backend error details 2026-07-13 19:46:30 +09:00
Hare 6b91d83fe2 runtime: normalize filesystem options 2026-07-13 19:06:26 +09:00
Hare b82407816e runtime: remove workspace cwd options 2026-07-13 18:31:54 +09:00
Hare f54ba6950c ticket: start runtime option cleanup 2026-07-13 18:22:30 +09:00
Hare a5e38f5964 ticket: remove runtime workspace cwd options 2026-07-13 18:22:30 +09:00
Hare 49f085916e runtime: remove runtime-owned id 2026-07-13 17:38:09 +09:00
Hare 6fedf81785 ticket: start runtime id removal 2026-07-13 16:43:36 +09:00
Hare 6af7f61247 ticket: remove runtime-owned id 2026-07-13 16:43:36 +09:00
Hare 4a90267ebc workspace: remove input readiness capability 2026-07-12 23:43:44 +09:00
Hare c948b669c1 runtime: restore persisted worker execution 2026-07-12 23:38:56 +09:00
Hare c56b8c04ea ticket: start runtime worker restore 2026-07-12 23:16:14 +09:00
Hare 8b235b6cf5 ticket: add runtime worker restore plan 2026-07-12 23:16:05 +09:00
Hare 59b1b3df79 workspace: gate workdir assignment 2026-07-12 20:07:32 +09:00
Hare 21802d68f8 workspace: finalize workdir deletion flow 2026-07-12 16:33:14 +09:00
Hare 52cccc7f2f workspace: track workdir observation state 2026-07-12 12:32:24 +09:00
Hare 3009bb4ad9 workspace: delete workers through runtime 2026-07-12 09:06:59 +09:00
Hare d8c0853d55 workspace: refine runtime and cleanup lists 2026-07-12 06:57:10 +09:00
Hare c5aae4b234 workspace: use opaque numeric worker ids 2026-07-12 05:07:39 +09:00
Hare 664f8693a0 ticket: close worker display name preservation 2026-07-11 17:44:32 +09:00
Hare 88d819591e workspace: preserve worker display names 2026-07-11 17:44:23 +09:00
Hare 593d3309d9 ticket: preserve worker display names 2026-07-11 17:31:54 +09:00
Hare 32d1ae597e ticket: close archived worker console links 2026-07-11 16:01:41 +09:00
Hare 30d15daddf workspace: disable archived worker console links 2026-07-11 16:01:29 +09:00
Hare d8412d022b ticket: disable archived worker console links 2026-07-11 15:52:17 +09:00
Hare d53bfd8087 ticket: close worker status removal 2026-07-11 15:22:34 +09:00
Hare 2d2c29a775 workspace: remove worker status field 2026-07-11 15:22:23 +09:00
Hare 69560addf8 ticket: remove worker status field 2026-07-11 15:06:13 +09:00
Hare b6bb22f956 merge: orchestration 2026-07-11 13:44:15 +09:00
Hare 6823f0e72d ticket: close worker lifecycle state removal 2026-07-11 13:34:08 +09:00
Hare b877c92975 workspace: remove worker lifecycle state 2026-07-11 13:33:49 +09:00
Hare 13f9e0fab8 ticket: remove worker lifecycle state 2026-07-11 13:09:06 +09:00
Hare 7d3b364728 ticket: close workspace backend work 2026-07-11 10:10:05 +09:00
Hare 391f11fc23 merge: workspace backend worker context 2026-07-11 10:07:19 +09:00
Hare 5d4cb9b3fe ticket: approve workspace backend implementation 2026-07-11 10:07:12 +09:00
Hare 0736de6451 ticket: record workspace backend implementation 2026-07-11 10:00:03 +09:00
Hare 142b60e1b3 refactor: separate worker workspace identity 2026-07-11 09:58:20 +09:00
Hare a98e25eda8 ticket: close observation cursor removal 2026-07-11 09:31:57 +09:00
Hare 10762a3c8b workspace: remove observation cursor surface 2026-07-11 09:31:49 +09:00
Hare 74b07bd787 ticket: accept workspace backend work 2026-07-11 09:15:16 +09:00
Hare 14e704b858 ticket: close embedded no-workdir policy work 2026-07-11 09:13:58 +09:00
Hare 2f7b809401 merge: embedded no-workdir worker policy 2026-07-11 09:12:34 +09:00
Hare 50eec7885a ticket: approve embedded no-workdir policy 2026-07-11 09:12:29 +09:00
Hare 54eaa44681 ticket: remove observation cursor surface 2026-07-11 09:09:33 +09:00
Hare 7223cab0b2 ticket: record embedded no-workdir implementation 2026-07-11 09:01:00 +09:00
Hare 10267869ae feat: enforce embedded no-workdir worker policy 2026-07-11 08:59:19 +09:00
Hare 1d7765d9ee ticket: close observation replay removal 2026-07-11 08:50:55 +09:00
Hare 7d393f8c98 ticket: finish observation replay removal 2026-07-11 08:50:55 +09:00
Hare 8a3fca65f2 workspace: remove observation replay 2026-07-11 08:50:42 +09:00
Hare 83c9d8844d ticket: route embedded no-workdir worker work 2026-07-11 08:38:59 +09:00
Hare 3a0600be0f ticket: remove observation replay 2026-07-11 08:35:04 +09:00
Hare 0e01e5c84b workspace: align console colors with tui 2026-07-11 08:18:44 +09:00
Hare 69607d02bc workspace: remove console color rail 2026-07-11 08:05:28 +09:00
Hare 33ae73e7ee ticket: close rich console rendering 2026-07-11 07:46:12 +09:00
Hare db5c1d64d1 workspace: add rich console rendering 2026-07-11 07:46:03 +09:00
Hare 0f2d7263a8 ticket: close worker filesystem authority work 2026-07-11 07:45:08 +09:00
Hare c29e913511 merge: worker filesystem authority 2026-07-11 07:40:45 +09:00
Hare 19a52742a3 ticket: approve worker filesystem authority implementation 2026-07-11 07:40:38 +09:00
Hare 5d07e9b9d5 ticket: console rich rendering 2026-07-11 07:31:41 +09:00
Hare 44410a0fdd ticket: record worker filesystem authority implementation 2026-07-11 07:31:20 +09:00
Hare b50b94612a feat: add explicit worker filesystem authority 2026-07-11 07:30:17 +09:00
Hare 89ba205cac workspace: aggregate console read calls 2026-07-11 07:28:31 +09:00
Hare dbc223e9e0 ticket: close console tool call rendering 2026-07-11 07:17:10 +09:00
Hare 2a6930a946 workspace: group console tool calls 2026-07-11 07:17:03 +09:00
Hare a5417320eb ticket: console tool call rendering 2026-07-11 07:09:21 +09:00
Hare a38fcdf04d ticket: hold workspace backend work for authority base 2026-07-11 07:04:02 +09:00
Hare 4b2e03d7cc ticket: queue 00001KX6Y6ZEA 2026-07-11 07:03:28 +09:00
Hare 603a717e40 merge: sync orchestration before queue 00001KX6Y6ZEA 2026-07-11 07:03:27 +09:00
Hare e6b5013224 ticket: ready worker workspace backend 2026-07-11 07:01:46 +09:00
Hare 3ee9469c1a ticket: hold embedded no-workdir policy for authority base 2026-07-11 07:00:37 +09:00
Hare bbcc91db01 ticket: require workspace root removal 2026-07-11 07:00:25 +09:00
Hare 366af8c544 ticket: queue 00001KX6WVNPD 2026-07-11 07:00:07 +09:00
Hare 505bbd7cc9 merge: sync orchestration before queue 00001KX6WVNPD 2026-07-11 07:00:07 +09:00
Hare e4653f7a2d ticket: ready embedded no-workdir worker 2026-07-11 06:59:20 +09:00
Hare f7191056b7 ticket: align embedded policy with filesystem authority 2026-07-11 06:54:22 +09:00
Hare db3a7165f7 ticket: accept worker filesystem authority work 2026-07-11 06:51:37 +09:00
Hare 5c228a7fae ticket: queue 00001KX6Y2A9Q 2026-07-11 06:51:00 +09:00
Hare e40445b07a ticket: ready worker filesystem authority 2026-07-11 06:49:37 +09:00
Hare 3df1c2dcfa ticket: require cwd authority removal 2026-07-11 06:46:25 +09:00
Hare 6fa3d9d21f ticket: normalize worker authority priority 2026-07-11 06:34:18 +09:00
Hare 358fb32fe7 ticket: clarify worker workspace identity 2026-07-11 06:23:30 +09:00
Hare 632a3310ea ticket: worker workspace backend 2026-07-11 06:16:53 +09:00
Hare 9d6400cf2f ticket: worker filesystem authority 2026-07-11 06:14:22 +09:00
Hare c44bdb286a ticket: embedded no-workdir worker authority 2026-07-11 05:53:24 +09:00
Hare cab6a5300d merge: orchestration 2026-07-11 04:52:53 +09:00
Hare 254360f1ab profile: remove lua profile resolver 2026-07-11 04:44:32 +09:00
Hare 156f8ad044 runtime: remove worker transcript projection 2026-07-11 03:55:44 +09:00
Hare 1262b6022a ticket: close manual cleanup work 2026-07-11 03:37:44 +09:00
Hare 4970a58c5a merge: manual worker workdir cleanup
# Conflicts:
#	.yoi/tickets/00001KX6CRVBE/item.md
#	.yoi/tickets/00001KX6CRVBE/thread.md
2026-07-11 03:36:24 +09:00
Hare 1b4d336d80 ticket: approve manual cleanup implementation 2026-07-11 03:36:14 +09:00
Hare c961185635 ticket: record manual cleanup safety fix 2026-07-11 03:30:57 +09:00
Hare 361569a69e fix: require discard confirmation for unknown workdirs 2026-07-11 03:30:08 +09:00
Hare 29ddc168a3 ticket: record manual cleanup review blocker 2026-07-11 03:19:16 +09:00
Hare 85da6a6c33 ticket: record manual cleanup implementation evidence 2026-07-11 03:13:44 +09:00
Hare ba44391acf feat: add manual worker workdir cleanup 2026-07-11 03:12:51 +09:00
Hare 5f762a6ce3 ticket: accept manual cleanup work 2026-07-11 02:39:10 +09:00
Hare dcab396e69 ticket: close worker workdir registry work 2026-07-11 02:38:25 +09:00
Hare 03652f8210 merge: worker workdir registry
# Conflicts:
#	.yoi/tickets/00001KX6BPY7M/item.md
#	.yoi/tickets/00001KX6BPY7M/thread.md
2026-07-11 02:35:48 +09:00
Hare 763709fdf8 ticket: approve worker workdir registry implementation 2026-07-11 02:35:34 +09:00
Hare 26e4efc990 ticket: record unmanaged workdir fix pass 2026-07-11 02:32:07 +09:00
Hare 239f93b084 fix: keep unmanaged workdirs out of managed lists 2026-07-11 02:31:29 +09:00
Hare d9b3eb0e8b ticket: record unmanaged workdir review blocker 2026-07-11 02:22:18 +09:00
Hare e6b52b045a ticket: record worker workdir registry fix pass 2026-07-11 02:14:06 +09:00
Hare 8695089fba fix: sync backend worker registry projections 2026-07-11 02:13:00 +09:00
Hare 522c7043b1 ticket: record worker workdir registry review blockers 2026-07-11 01:52:34 +09:00
Hare 210f41e020 objective: clarify worker cleanup retention 2026-07-11 01:48:49 +09:00
Hare 1ed0501f8e ticket: hold cleanup work for registry review 2026-07-11 01:46:14 +09:00
Hare 234d62bbef ticket: queue 00001KX6CRVBE 2026-07-11 01:45:14 +09:00
Hare 5f669b90ef merge: sync orchestration before queue 00001KX6CRVBE 2026-07-11 01:45:14 +09:00
Hare db8cfa8142 ticket: ready manual worker workdir cleanup 2026-07-11 01:44:28 +09:00
Hare c949e1b4f2 ticket: simplify worker delete lifecycle 2026-07-11 01:43:46 +09:00
Hare c2afaefb5f ticket: record worker workdir registry implementation evidence 2026-07-11 01:40:24 +09:00
Hare 3e5546ea33 feat: add backend worker workdir registry 2026-07-11 01:38:23 +09:00
Hare c88283dbe5 ticket: include worker pinning in manual prune 2026-07-11 01:31:22 +09:00
Hare 1564d7e411 ticket: route worker workdir registry coder 2026-07-11 01:13:26 +09:00
Hare 452d07273c ticket: manual worker workdir prune 2026-07-11 01:12:43 +09:00
Hare 86f652a72f ticket: accept worker workdir registry work 2026-07-11 01:12:18 +09:00
Hare 651422e0c8 ticket: queue 00001KX6BPY7M 2026-07-11 01:10:57 +09:00
Hare fe66437589 ticket: ready backend worker workdir registry 2026-07-11 01:06:19 +09:00
Hare 04cb2f700d ticket: backend worker workdir registry 2026-07-11 00:54:35 +09:00
Hare 24156947ac ui: add runtime workdir pages 2026-07-11 00:15:49 +09:00
Hare 47e03bd54b ui: move workers list to page 2026-07-10 12:06:10 +09:00
Hare a3cb59af43 ui: move worker launch to page 2026-07-10 10:32:44 +09:00
Hare d149f7e936 runtime: namespace spawned worker names 2026-07-10 04:18:14 +09:00
Hare 611f1656a3 profile: inherit default model for roles 2026-07-10 03:58:45 +09:00
Hare 69fd11a233 runtime: use workspace id for profile archives 2026-07-10 03:14:15 +09:00
Hare 9f6abb675c runtime: tolerate corrupt worker snapshots 2026-07-10 02:51:55 +09:00
Hare c3afcc7491 runtime: fetch profile archives for remote workers 2026-07-10 01:32:26 +09:00
Hare ef0799c278 merge: orchestration 2026-07-09 19:24:12 +09:00
Hare d216b10100 runtime: default working directories to data dir 2026-07-09 19:24:04 +09:00
Hare fa233ba025 runtime: own working directories 2026-07-09 19:04:37 +09:00
Hare 36454e831b ticket: close profile source tree work 2026-07-09 18:18:57 +09:00
Hare 9a2e57fb0e merge: profile source tree editor
# Conflicts:
#	.yoi/tickets/00001KX1JNJ2Y/item.md
#	.yoi/tickets/00001KX1JNJ2Y/thread.md
2026-07-09 18:16:49 +09:00
Hare dccfe539ef ticket: approve profile source tree work 2026-07-09 18:16:38 +09:00
Hare ae227c7e4d ticket: record profile source tree symlink fix 2026-07-09 18:10:08 +09:00
Hare 13c6548b46 fix: reject profile source root symlinks 2026-07-09 18:08:31 +09:00
Hare 2dfad3500f ticket: record profile source tree symlink blocker 2026-07-09 17:57:33 +09:00
Hare c5a9f8a0ab ticket: record profile source tree review fixes 2026-07-09 17:52:24 +09:00
Hare 941b91261b fix: complete profile source tree review fixes 2026-07-09 17:47:19 +09:00
Hare 0458af721f ticket: record profile source tree review blockers 2026-07-09 17:32:43 +09:00
Hare 129079cad4 ticket: record profile source tree implementation evidence 2026-07-09 17:28:23 +09:00
Hare 81abfa630a feat: add profile source tree editor 2026-07-09 17:22:57 +09:00
Hare ce2ccce98e ticket: route profile source tree coder 2026-07-09 16:59:00 +09:00
Hare 7da14f1a8d ticket: accept profile source tree work 2026-07-09 16:58:08 +09:00
Hare afc43780a7 ticket: queue 00001KX1JNJ2Y 2026-07-09 16:56:07 +09:00
Hare b06e1b3dc2 ticket: ready profile source tree editor 2026-07-09 16:18:33 +09:00
Hare 23ab100d20 ticket: include decodal source editor 2026-07-09 04:21:52 +09:00
Hare 1400ebd2f1 ticket: profile source tree virtual fs 2026-07-09 04:19:30 +09:00
Hare 292ad2c202 ui: split workspace settings routes 2026-07-09 01:23:34 +09:00
Hare 981f0501a3 merge: backend resource and profile settings 2026-07-08 23:11:54 +09:00
Hare f3cd632b64 ticket: backend memory observation pipeline 2026-07-08 22:46:50 +09:00
Hare 5c862ca12a ticket: close workspace profile settings work 2026-07-08 22:20:36 +09:00
Hare 0bf3638c64 merge: workspace profile settings
# Conflicts:
#	.yoi/tickets/00001KX0DSMPT/item.md
#	.yoi/tickets/00001KX0DSMPT/thread.md
2026-07-08 22:19:14 +09:00
Hare 137234fae0 ticket: approve profile settings implementation 2026-07-08 22:19:04 +09:00
Hare bfba61cee6 ticket: record profile settings review fixes 2026-07-08 22:07:45 +09:00
Hare 0c2ca1eafb fix: harden profile settings validation 2026-07-08 22:06:12 +09:00
Hare 1a8824613b ticket: record profile settings review blockers 2026-07-08 21:49:19 +09:00
Hare e8048e6dc3 ticket: record profile settings implementation evidence 2026-07-08 21:40:15 +09:00
Hare 3eefd33334 feat: add workspace profile settings 2026-07-08 21:38:23 +09:00
Hare 950427a135 ticket: backend ticket objective api 2026-07-08 21:28:11 +09:00
Hare 3abaf51a66 ticket: record profile settings coder recovery 2026-07-08 21:03:33 +09:00
Hare 620e37da8b ticket: route workspace profile settings coder 2026-07-08 20:58:26 +09:00
Hare c903beee69 ticket: accept workspace profile settings work 2026-07-08 20:56:51 +09:00
Hare a645ee5b79 ticket: close backend resource fetch work 2026-07-08 20:55:03 +09:00
Hare 01f94b7591 merge: backend resource fetch api 2026-07-08 20:53:12 +09:00
Hare fd1ab4bad8 ticket: approve backend resource fetch work 2026-07-08 20:53:12 +09:00
Hare 237c75448c ticket: record backend resource fetch review fixes 2026-07-08 20:45:52 +09:00
Hare e716ae44f0 fix: harden backend resource handles 2026-07-08 20:44:04 +09:00
Hare a0ef9a9f82 ticket: record backend resource fetch review blockers 2026-07-08 20:27:33 +09:00
Hare 595da68751 ticket: record backend resource fetch implementation evidence 2026-07-08 20:20:32 +09:00
Hare 57e96d3be8 feat: add backend resource fetch api 2026-07-08 20:18:38 +09:00
Hare 352be1f4c7 ticket: hold profile settings for resource fetch 2026-07-08 19:45:57 +09:00
Hare 98f6bd14b3 ticket: queue 00001KX0DSMPT 2026-07-08 19:44:13 +09:00
Hare 813af7b4c4 merge: sync orchestration before queue 00001KX0DSMPT 2026-07-08 19:44:12 +09:00
Hare 92adee2ada ticket: route backend resource fetch coder 2026-07-08 19:40:33 +09:00
Hare 0c8b5b962c ticket: ready workspace profile settings 2026-07-08 19:40:06 +09:00
Hare 2109ad1021 ticket: use plain text profile editor 2026-07-08 19:39:46 +09:00
Hare 1a2097b10d ticket: accept backend resource fetch work 2026-07-08 19:39:25 +09:00
Hare ffc16deac2 ticket: close decodal profile archive work 2026-07-08 19:35:46 +09:00
Hare 0334c5725e merge: decodal profile archives
# Conflicts:
#	.yoi/tickets/00001KWZ5KERY/item.md
#	.yoi/tickets/00001KWZ5KERY/thread.md
2026-07-08 19:33:39 +09:00
Hare e17c7a5b82 ticket: approve decodal profile archive work 2026-07-08 19:33:27 +09:00
Hare 7f81c6cdf4 ticket: record decodal profile archive review fixes 2026-07-08 19:23:18 +09:00
Hare a2833dadca fix: reject unknown profile archive selectors 2026-07-08 19:21:52 +09:00
Hare 27fa1cc815 ticket: record decodal profile archive review blockers 2026-07-08 19:07:16 +09:00
Hare ab55238d29 ticket: hold backend resource fetch for decodal ordering 2026-07-08 19:05:49 +09:00
Hare 81cf73e452 ticket: queue 00001KX0G06VA 2026-07-08 19:04:10 +09:00
Hare 0dc5fc687f merge: sync orchestration before queue 00001KX0G06VA 2026-07-08 19:04:10 +09:00
Hare 89fdc6b443 ticket: record decodal profile archive implementation evidence 2026-07-08 18:59:39 +09:00
Hare a823d414d0 feat: add decodal profile archives 2026-07-08 18:57:54 +09:00
Hare 048b0af614 ticket: avoid changing active decodal work 2026-07-08 18:44:12 +09:00
Hare 461ae6a89e ticket: ready runtime backend resource rest api 2026-07-08 18:28:04 +09:00
Hare dccd8d03af ticket: route decodal profile archive coder 2026-07-08 18:14:34 +09:00
Hare 63f3129eb7 ticket: add runtime backend resource channel 2026-07-08 18:14:31 +09:00
Hare 56cac3c74a ticket: accept decodal profile archive work 2026-07-08 18:13:24 +09:00
Hare 190f6a2a8f ticket: queue 00001KWZ5KERY 2026-07-08 18:11:22 +09:00
Hare e5fb26ca74 ticket: ready decodal profile archive migration 2026-07-08 18:03:55 +09:00
Hare 1688f2a640 fix: separate profile base from working directory 2026-07-08 18:03:55 +09:00
Hare 061e52c35c ticket: profile source archive migration order 2026-07-08 18:01:34 +09:00
Hare bbe6694122 ticket: workspace profile settings api 2026-07-08 17:35:01 +09:00
Hare a84e968699 ticket: use event driven worker config bundle sync 2026-07-08 15:55:12 +09:00
Hare fb25f1a33d ticket: scope config bundle sync implementation 2026-07-08 06:05:47 +09:00
Hare ebc3804ebd ticket: design config bundle sync strategy 2026-07-08 05:52:40 +09:00
Hare 25900f31cf refactor: remove working directory allocation terminology 2026-07-08 04:56:22 +09:00
Hare 5c33b2f63d ticket: close runtime connection reload 2026-07-08 04:16:57 +09:00
Hare fa219e40b3 merge: browser working directory spawn 2026-07-08 02:27:53 +09:00
Hare 9745bf041c ui: show worker spawn diagnostics 2026-07-08 02:27:19 +09:00
Hare a6fe68301c Merge branch 'develop' into orchestration
# Conflicts:
#	.yoi/objectives/00001KVJPT2PP/item.md
#	.yoi/objectives/00001KWW44EXK/item.md
2026-07-08 01:15:07 +09:00
Hare 40463b6133 refactor: rename execution workspace to working directory 2026-07-08 01:14:14 +09:00
Hare 0cad2308cc ticket: close browser execution workspace work 2026-07-07 23:59:03 +09:00
Hare b52986e55a merge: browser execution workspaces 2026-07-07 23:57:00 +09:00
Hare 7acf06ad23 ticket: approve browser execution workspace work 2026-07-07 23:57:00 +09:00
Hare 55105564bf ticket: record browser execution workspace review fixes 2026-07-07 23:51:40 +09:00
Hare 9adb0fae82 fix: preserve execution workspace cwd diagnostics 2026-07-07 23:50:01 +09:00
Hare a6b93ceabc objective: clarify working directory terminology 2026-07-07 23:41:27 +09:00
Hare 05a592d80b ticket: record browser execution workspace review blocker 2026-07-07 23:37:08 +09:00
Hare 41cc66b11b ticket: record browser execution workspace implementation evidence 2026-07-07 23:23:35 +09:00
Hare 684b19e87c feat: add browser execution workspaces 2026-07-07 23:21:20 +09:00
Hare 57a5af8efd ticket: route browser execution workspace coder 2026-07-07 22:42:57 +09:00
Hare ecf10c72ab ticket: accept browser execution workspace work 2026-07-07 22:41:51 +09:00
Hare 9f1c17d4e9 ticket: queue 00001KWY8EHEJ 2026-07-07 22:40:23 +09:00
Hare 6db5751bbf ticket: ready browser execution workspace spawn 2026-07-07 21:26:40 +09:00
Hare ce773d0fb4 ticket: browser execution workspace spawn 2026-07-07 21:22:42 +09:00
Hare fbc9ba411e merge: workspace id route scoping
# Conflicts:
#	web/workspace/src/lib/workspace-sidebar/WorkspaceSidebar.svelte
2026-07-07 06:27:48 +09:00
Hare 7f6a057e22 ui: refine workspace sidebar controls 2026-07-07 06:19:08 +09:00
Hare 1d88b333a9 ticket: close workspace id route scoping 2026-07-07 05:53:50 +09:00
Hare 13e756e74f merge: workspace id route scoping 2026-07-07 05:52:46 +09:00
Hare f3fdc98319 ticket: approve workspace id route scoping 2026-07-07 05:52:46 +09:00
Hare 3315fa5458 ticket: record workspace id route review fixes 2026-07-07 05:45:40 +09:00
Hare 71340b8999 fix: redirect unscoped workspace routes 2026-07-07 05:44:22 +09:00
Hare a2f2e37585 ticket: record workspace id route review blockers 2026-07-07 05:36:54 +09:00
Hare 55f93fd987 ticket: record workspace id route implementation evidence 2026-07-07 05:27:20 +09:00
Hare f6ad9cfcd3 feat: scope workspace routes by id 2026-07-07 05:26:03 +09:00
Hare ab33c30d7c ticket: route workspace id scoping coder 2026-07-07 04:55:32 +09:00
Hare 34836d97ae ticket: accept workspace id route scoping 2026-07-07 04:54:37 +09:00
Hare 384d162b74 ticket: queue 00001KWWE8E04 2026-07-07 04:53:14 +09:00
Hare 76153b64c7 merge: sync orchestration before queue 00001KWWE8E04 2026-07-07 04:53:14 +09:00
Hare 72ace6e913 ticket: ready workspace scoped routes 2026-07-07 04:48:42 +09:00
Hare 376a43b8ae ticket: close execution workspace materializer 2026-07-07 04:24:31 +09:00
Hare c4cdf1c37e merge: execution workspace materializer 2026-07-07 04:23:08 +09:00
Hare ab19882b8e ticket: approve execution workspace materializer 2026-07-07 04:23:08 +09:00
Hare 673fbeed09 ticket: record execution workspace review fixes 2026-07-07 04:17:23 +09:00
Hare c90ebf2468 fix: keep execution workspace paths internal 2026-07-07 04:16:04 +09:00
Hare 6c4df18da1 ticket: record execution workspace review blocker 2026-07-07 04:06:30 +09:00
Hare 5ef8e4e8ba refactor: move workspace pages into routes 2026-07-07 04:04:37 +09:00
Hare 504090ac99 ticket: record execution workspace implementation evidence 2026-07-07 03:57:46 +09:00
Hare 8b7a5da031 feat: materialize execution workspaces 2026-07-07 03:56:32 +09:00
Hare 9a064117bd ticket: route execution workspace coder 2026-07-07 03:31:17 +09:00
Hare 50c80e7747 ticket: accept execution workspace materializer 2026-07-07 03:30:04 +09:00
Hare 4e72bc6be3 ticket: queue 00001KWW9DYH4 2026-07-07 03:28:26 +09:00
Hare 3cee4116d1 ticket: plan execution workspace materializer 2026-07-07 03:27:12 +09:00
Hare 1f69061956 fix: normalize runtime workspace bootstrap 2026-07-07 03:27:12 +09:00
Hare b6029220ff fix: refine workspace runtime UI 2026-07-06 22:51:25 +09:00
Hare 5279f8fc0d merge: repository registry 2026-07-05 23:51:54 +09:00
Hare 8528c9057a ticket: close repository registry work 2026-07-05 05:19:21 +09:00
Hare a786fd85a7 merge: repository registry implementation 2026-07-05 05:18:01 +09:00
Hare b0334e042b ticket: approve repository registry implementation 2026-07-05 05:18:01 +09:00
Hare 7163ba7197 ticket: record repository registry review fixes 2026-07-05 05:11:36 +09:00
Hare 14e63ca5b6 fix: derive repository UI from registry 2026-07-05 05:10:23 +09:00
Hare a62653e5bc ticket: record repository registry review blockers 2026-07-05 05:03:00 +09:00
Hare 6717ced46a ticket: record repository registry implementation evidence 2026-07-05 04:58:57 +09:00
Hare 2f0d1cee19 feat: add workspace repository registry 2026-07-05 04:57:52 +09:00
Hare 6c2f2e0df3 ticket: route repository registry coder 2026-07-05 04:37:01 +09:00
Hare 416d67ca06 ticket: accept repository registry work 2026-07-05 04:35:55 +09:00
Hare f4d7631f19 ticket: queue 00001KWPC13WQ 2026-07-05 04:34:04 +09:00
Hare 23d3782f38 ticket: ready repository registry 2026-07-04 19:59:11 +09:00
Hare 078f2137b3 docs: update workspace runtime objective 2026-07-04 19:58:50 +09:00
Hare 1ebdf7cf7a ticket: add repository registry work 2026-07-04 19:51:33 +09:00
Hare b3dac8ea68 feat: live reload runtime connections 2026-07-04 04:47:23 +09:00
Hare 296da3a440 ticket: add runtime registry reload 2026-07-04 01:00:28 +09:00
Hare da047d5686 merge: close runtime worker tickets 2026-07-03 03:24:57 +09:00
Hare f28d4d5d3a ticket: close runtime worker tickets 2026-07-03 03:24:57 +09:00
Hare 540e55d499 merge: runtime worker ticket records 2026-07-03 03:20:35 +09:00
Hare 4edaa73dde merge: runtime worker controls 2026-07-03 03:20:35 +09:00
Hare c2c594411d ticket: approve runtime worker implementation 2026-07-03 03:20:17 +09:00
Hare 50016b122c ticket: record runtime worker review fixes 2026-07-03 03:11:16 +09:00
Hare 47ed0ff825 fix: harden runtime and worker launch controls 2026-07-03 02:54:48 +09:00
Hare f28be76ab6 ticket: record runtime worker review blockers 2026-07-03 02:36:49 +09:00
Hare 64f1780ede ticket: record runtime worker implementation evidence 2026-07-03 02:29:39 +09:00
Hare f2fead7ebd feat: add workspace runtime and worker controls 2026-07-03 02:27:42 +09:00
Hare 4267084d5a ticket: record combined coder routing 2026-07-03 02:03:34 +09:00
Hare 2eb90470bb ticket: accept runtime and worker tickets 2026-07-03 02:01:21 +09:00
Hare 69563cc2f9 ticket: queue 00001KWHHRTM9 2026-07-03 01:45:19 +09:00
Hare dc1f68903d ticket: ready runtime connection management 2026-07-03 01:45:18 +09:00
Hare 9f2c9ac048 ticket: queue 00001KWHEM8YJ 2026-07-03 01:13:24 +09:00
Hare 73f76170ef merge: sync orchestration before queue 00001KWHEM8YJ 2026-07-03 01:13:24 +09:00
Hare d276e27e81 ticket: ready manual coding worker launch 2026-07-03 00:39:49 +09:00
Hare 578ea261a4 ticket: plan runtime connection negotiation 2026-07-03 00:29:58 +09:00
Hare d1e8333551 ticket: record settings admin shell cleanup 2026-07-02 23:39:08 +09:00
Hare 9f9c65bea6 ticket: close settings admin shell 2026-07-02 23:38:40 +09:00
Hare fdad94afbf merge: settings admin shell 2026-07-02 23:37:46 +09:00
Hare fca13aab7a ticket: approve settings admin shell 2026-07-02 23:37:35 +09:00
Hare 02fc884fad ticket: record settings reviewer spawn failure 2026-07-02 23:36:48 +09:00
Hare 9006eb8228 ticket: record settings admin shell implementation 2026-07-02 23:36:17 +09:00
Hare c0c6880b1a feat: add settings admin shell 2026-07-02 23:34:30 +09:00
Hare b2f8f16949 ticket: record settings coder spawn failure 2026-07-02 23:26:45 +09:00
Hare bcf71f588d ticket: accept settings admin shell 2026-07-02 23:25:53 +09:00
Hare fee175fc72 ticket: queue 00001KWHJ0XH6 2026-07-02 23:24:54 +09:00
Hare 109b74da42 ticket: ready settings admin shell 2026-07-02 23:18:50 +09:00
Hare 7a0eb1566a ticket: close worker console redesign 2026-07-02 21:16:11 +09:00
Hare 8e449acd59 feat: manage workspace backend local config 2026-07-02 21:02:45 +09:00
Hare da631029cb feat: add explicit workspace init 2026-07-02 18:20:38 +09:00
Hare 5002be498f ticket: plan workspace init command 2026-07-02 18:03:55 +09:00
Hare a123db83ad feat: install workspace backend config template 2026-07-02 01:38:47 +09:00
Hare 8b1e4b721f ticket: close workspace backend config schema 2026-07-02 00:48:28 +09:00
Hare 5a8d18ec27 feat: add workspace backend config schema 2026-07-02 00:48:17 +09:00
Hare 52b445e6bc ticket: define workspace backend config schema 2026-07-02 00:30:24 +09:00
Hare 9ae9b0a043 ui: filter worker console protocol noise 2026-07-01 23:32:39 +09:00
Hare 11d94d3866 merge: worker runtime orchestration 2026-06-29 11:53:52 +09:00
Hare 3a41581c5c ticket: record old pod crate cleanup cleanup 2026-06-29 05:10:57 +09:00
Hare 0bdb55e658 ticket: close old pod crate cleanup 2026-06-29 05:10:33 +09:00
Hare 83d433bf7e merge: old pod crate cleanup 2026-06-29 05:04:59 +09:00
Hare 9582a1761d ticket: approve old pod crate cleanup 2026-06-29 05:04:52 +09:00
Hare 9b0fe97cd9 ticket: record e2e worker metadata root fix 2026-06-29 05:02:34 +09:00
Hare fdd902d534 fix: align e2e worker metadata root 2026-06-29 05:01:56 +09:00
Hare c8a5b8d53d ticket: request e2e worker metadata root fix 2026-06-29 05:00:17 +09:00
Hare 95523dc66f ticket: record old pod cleanup wording fix 2026-06-29 04:55:15 +09:00
Hare c46e880b50 fix: finish worker wording cleanup 2026-06-29 04:54:33 +09:00
Hare 5e08d328d5 ticket: route old pod cleanup fixes 2026-06-29 04:51:41 +09:00
Hare 4f57beda7a ticket: request old pod cleanup wording fixes 2026-06-29 04:51:07 +09:00
Hare 094a728b8a ticket: start old pod crate cleanup review 2026-06-29 04:46:34 +09:00
Hare a5be6b758c ticket: record old pod crate cleanup implementation 2026-06-29 04:46:06 +09:00
Hare 17a9488a4a refactor: remove old pod crates 2026-06-29 04:44:55 +09:00
Hare 1fa85fb89c ticket: start old pod crate cleanup 2026-06-29 04:18:47 +09:00
Hare 0fd99075f0 ticket: accept old pod crate cleanup 2026-06-29 04:17:41 +09:00
Hare 9eda90067e ticket: record embedded runtime fs-store cleanup 2026-06-29 04:16:57 +09:00
Hare 44be40451b ticket: close embedded runtime fs-store 2026-06-29 04:16:35 +09:00
Hare 888e7b68e5 merge: embedded runtime fs-store 2026-06-29 04:15:25 +09:00
Hare ac42a6477b ticket: approve embedded runtime fs-store 2026-06-29 04:15:17 +09:00
Hare 24118a0f3c ticket: start embedded runtime fs-store review 2026-06-29 04:06:13 +09:00
Hare 6871c19f39 ticket: record embedded runtime fs-store implementation 2026-06-29 04:05:51 +09:00
Hare 736b05c670 feat: persist embedded workspace runtime in fs store 2026-06-29 04:05:02 +09:00
Hare 6a448de618 ticket: start embedded runtime fs-store 2026-06-29 03:41:03 +09:00
Hare e3ad8b6e08 ticket: accept embedded runtime fs-store 2026-06-29 03:40:26 +09:00
Hare d65bc9395e ticket: record runtime worker launch cleanup 2026-06-29 03:39:30 +09:00
Hare 88ef627b6b ticket: close runtime worker launch unification 2026-06-29 03:39:07 +09:00
Hare bdb339fab8 merge: runtime worker launch unification 2026-06-29 03:37:45 +09:00
Hare b246cd97f7 ticket: approve runtime worker launch unification 2026-06-29 03:37:41 +09:00
Hare 9546542c15 ticket: record remote runtime projection fix 2026-06-29 03:35:17 +09:00
Hare ba7f9d2ee8 workspace: respect remote execution projection 2026-06-29 03:34:16 +09:00
Hare 7f0255baf5 ticket: request remote runtime projection fix 2026-06-29 03:17:11 +09:00
Hare 4dfe2394c5 ticket: record runtime worker launch fix 2026-06-29 03:12:06 +09:00
Hare c29d10b67b runtime: persist execution binding projection 2026-06-29 03:11:16 +09:00
Hare f340c6badc ticket: request runtime worker launch changes 2026-06-29 02:51:17 +09:00
Hare ea9f637747 ticket: start runtime worker launch review 2026-06-29 02:46:36 +09:00
Hare c060f5fe50 ticket: record runtime worker launch implementation 2026-06-29 02:46:11 +09:00
Hare 14bb4934a6 runtime: unify worker creation path 2026-06-29 02:44:52 +09:00
Hare eaf17ecb1b ticket: block embedded runtime fs-store on launch unification 2026-06-29 02:12:45 +09:00
Hare 4df3585190 chore: ignore worktree directories 2026-06-29 02:12:29 +09:00
Hare 7d751abc0f ticket: queue 00001KW76E8EG 2026-06-29 02:12:16 +09:00
Hare df8ada7003 merge: sync orchestration before queue 00001KW76E8EG 2026-06-29 02:12:16 +09:00
Hare 300a032562 ticket: ready embedded runtime fs-store 2026-06-29 02:11:13 +09:00
Hare b34bbf6482 ticket: block old pod crate cleanup on launch unification 2026-06-29 01:51:26 +09:00
Hare 445a40d5e7 ticket: queue 00001KW7835H0 2026-06-29 01:51:00 +09:00
Hare 539ee7ef72 merge: sync orchestration before queue 00001KW7835H0 2026-06-29 01:51:00 +09:00
Hare c2941af88a ticket: start runtime worker launch unification 2026-06-29 01:49:14 +09:00
Hare 9c8fb7dea6 ticket: accept runtime worker launch unification 2026-06-29 01:48:30 +09:00
Hare 262fc7f257 ticket: ready remove old pod crates 2026-06-29 01:48:14 +09:00
Hare ecc876b6c1 ticket: queue 00001KW7726H9 2026-06-29 01:47:42 +09:00
Hare 91e5fb41b5 ticket: ready runtime worker startup path 2026-06-29 01:45:14 +09:00
Hare 0602efd3b7 ui: simplify worker console 2026-06-28 22:41:32 +09:00
Hare 05d39e05c7 test: align companion execution assertions 2026-06-28 16:55:34 +09:00
Hare e7d56bba73 merge: embedded worker execution 2026-06-28 16:47:39 +09:00
Hare e5b539faee ticket: record companion llm cleanup 2026-06-28 16:20:27 +09:00
Hare 9c54bfe997 ticket: close workspace companion llm worker 2026-06-28 16:19:54 +09:00
Hare eb06b8a923 merge: workspace companion llm worker 2026-06-28 16:18:48 +09:00
Hare a21a62301d ticket: approve workspace companion llm worker 2026-06-28 16:18:41 +09:00
Hare 169a8d501e ticket: record companion workspace status fix 2026-06-28 16:14:20 +09:00
Hare 3be193223c fix: report companion console runtime status 2026-06-28 16:13:33 +09:00
Hare f00252c8aa ticket: request companion workspace status fix 2026-06-28 16:05:58 +09:00
Hare d09a6f5da1 ticket: record companion llm implementation 2026-06-28 15:56:54 +09:00
Hare ee25cfbcfd fix: route workspace companion through worker runtime 2026-06-28 15:56:00 +09:00
Hare dc8d8a0df5 ticket: request companion llm changes 2026-06-28 15:27:12 +09:00
Hare 05f1e1ed39 ticket: start companion llm review 2026-06-28 15:21:04 +09:00
Hare b43e6b7eee ticket: record companion llm verification pass 2026-06-28 15:20:36 +09:00
Hare 865d1092a0 ticket: record companion coder context error 2026-06-28 15:09:58 +09:00
Hare d91168825c ticket: start workspace companion llm worker 2026-06-28 15:04:06 +09:00
Hare 0c5a769abb ticket: accept workspace companion llm worker 2026-06-28 15:02:59 +09:00
Hare 9c3347f0ec ticket: record worker adapter cleanup 2026-06-28 15:02:21 +09:00
Hare 235cd88db9 ticket: close worker adapter 2026-06-28 06:45:04 +09:00
Hare c3ed223dfd merge: worker runtime worker adapter 2026-06-28 06:42:32 +09:00
Hare 1ab270ba46 ticket: approve worker adapter 2026-06-28 06:42:27 +09:00
Hare a45797baff ticket: record worker adapter spawn failure fix 2026-06-28 06:39:58 +09:00
Hare 7e29ff5ec9 fix: reject embedded spawn execution failures 2026-06-28 06:39:03 +09:00
Hare d02007c993 ticket: request worker adapter spawn failure fix 2026-06-28 06:27:40 +09:00
Hare d549b4bd08 ticket: record worker adapter fix 2026-06-28 06:22:05 +09:00
Hare 9069b03504 fix: connect embedded runtime input lifecycle 2026-06-28 06:20:34 +09:00
Hare af1a1eb836 ticket: request worker adapter changes 2026-06-28 05:58:09 +09:00
Hare ca4498e001 ticket: start worker adapter review 2026-06-28 05:51:46 +09:00
Hare 2d275de3cc ticket: record worker adapter implementation 2026-06-28 05:51:18 +09:00
Hare 18526ee362 feat: connect runtime worker execution adapter 2026-06-28 05:50:11 +09:00
Hare 1c4e7e5198 ticket: start worker runtime worker adapter 2026-06-28 05:12:36 +09:00
Hare e1e9fcb326 ticket: accept worker runtime worker adapter 2026-06-28 05:11:47 +09:00
Hare 435863a07f ticket: record worker execution backend cleanup 2026-06-28 05:09:48 +09:00
Hare 655c0a3ec6 ticket: close worker execution backend 2026-06-28 04:49:51 +09:00
Hare 0753e155a5 merge: worker runtime execution backend 2026-06-28 04:48:38 +09:00
Hare d7d1fbbdcb ticket: approve worker execution backend 2026-06-28 04:48:34 +09:00
Hare f7448c832e ticket: record worker execution backend fix 2026-06-28 04:46:48 +09:00
Hare 761b60c857 fix: initialize restored worker observations 2026-06-28 04:46:08 +09:00
Hare b6bfad7f8b ticket: request worker execution backend changes 2026-06-28 04:41:14 +09:00
Hare 4240bd29bb ticket: start worker execution backend review 2026-06-28 04:36:16 +09:00
Hare c242841957 ticket: record worker execution backend implementation 2026-06-28 04:34:29 +09:00
Hare 2d59717384 feat: add worker execution backend boundary 2026-06-28 04:33:01 +09:00
Hare 5420265236 ticket: start worker runtime execution boundary 2026-06-28 04:09:48 +09:00
Hare 9929d1c704 ticket: accept worker runtime execution boundary 2026-06-28 04:08:53 +09:00
Hare 62ce777cf8 ticket: queue 00001KW55B33H 2026-06-28 04:06:32 +09:00
Hare 6bfeb6d945 ticket: queue 00001KW55B33B 2026-06-28 04:06:30 +09:00
Hare e1f14a920d ticket: queue 00001KW55B32Y 2026-06-28 04:06:28 +09:00
Hare 3836639825 ticket: ready embedded worker execution 2026-06-28 04:06:24 +09:00
Hare d86b1fb06d ticket: plan embedded worker execution 2026-06-28 03:29:57 +09:00
Hare 2fb7514daa runtime: remove fake companion responses 2026-06-28 03:06:12 +09:00
Hare 67df7d1a53 runtime: make worker console observation required 2026-06-28 02:11:43 +09:00
Hare 135667417b ui: remove legacy local worker projection 2026-06-27 18:31:17 +09:00
Hare 62420b7cc4 merge: worker console redesign
# Conflicts:
#	web/workspace/src/lib/workspace-sidebar/WorkersNavSection.svelte
2026-06-27 03:26:48 +09:00
Hare 7d90cb644d ui: compact workspace overview 2026-06-27 03:25:28 +09:00
Hare 18aa07446e ticket: record worker console cleanup 2026-06-27 03:22:58 +09:00
Hare 29d6209ea4 ticket: mark worker console redesign done 2026-06-27 03:22:17 +09:00
Hare 864efe32e4 merge: 00001KW2GCPYF worker console redesign 2026-06-27 03:21:24 +09:00
Hare 867a8ee55b ticket: approve worker console redesign 2026-06-27 03:21:24 +09:00
Hare 10322595c6 ticket: record worker console refresh fix 2026-06-27 03:19:21 +09:00
Hare a1083908b6 fix: stabilize worker console refresh 2026-06-27 03:18:26 +09:00
Hare f98dc7d7ca ticket: request worker console effect fix 2026-06-27 03:12:02 +09:00
Hare a342dfb9d2 ticket: record worker console implementation 2026-06-27 03:07:28 +09:00
Hare c3fed59109 feat: worker attach workspace console 2026-06-27 03:06:10 +09:00
Hare f070b9e56f ticket: start worker console redesign 2026-06-27 02:47:34 +09:00
Hare f64e11b854 ticket: accept worker console redesign 2026-06-27 02:46:44 +09:00
Hare 816c79290f ticket: close runtime migration batch 2026-06-27 02:46:11 +09:00
Hare 22a2350126 ticket: queue 00001KW2GCPYF 2026-06-27 02:45:40 +09:00
Hare 971d2f832f ticket: plan worker console redesign 2026-06-27 02:45:26 +09:00
Hare 390b914268 merge: runtime backend orchestration updates 2026-06-27 01:28:11 +09:00
Hare aaf3cc8391 ticket: record tui runtime migration cleanup 2026-06-26 17:55:36 +09:00
Hare 3f6d5f29b8 ticket: mark tui runtime migration done 2026-06-26 17:54:53 +09:00
Hare 0a683bb227 merge: 00001KW04A8K6 tui runtime migration 2026-06-26 17:52:55 +09:00
Hare bd211d55fd ticket: approve tui runtime migration 2026-06-26 17:52:55 +09:00
Hare 5cfe1d7f4b ticket: record tui runtime migration implementation 2026-06-26 17:44:01 +09:00
Hare 63ec9f9572 feat: add backend runtime console target 2026-06-26 17:42:21 +09:00
Hare 94a2c94cc4 ticket: start tui runtime migration 2026-06-26 17:11:25 +09:00
Hare 65efde7651 ticket: accept tui runtime migration 2026-06-26 17:10:27 +09:00
Hare 0ba188889a ticket: record web console cleanup 2026-06-26 17:09:15 +09:00
Hare d9e6913791 ticket: mark web console mvp done 2026-06-26 17:08:24 +09:00
Hare bf834e8352 merge: 00001KVZ9JGK0 web console mvp 2026-06-26 17:07:32 +09:00
Hare b94fb8167d ticket: approve web console mvp 2026-06-26 17:07:32 +09:00
Hare 95c992ddbd ticket: record web console implementation 2026-06-26 17:02:51 +09:00
Hare f3ad9c96b3 feat: add workspace companion console MVP 2026-06-26 17:01:30 +09:00
Hare d6fe8b8d8a ticket: start web console mvp 2026-06-26 16:43:19 +09:00
Hare f39036032b ticket: accept web console mvp 2026-06-26 16:42:20 +09:00
Hare 32e1360802 ticket: record runtime config bundle cleanup 2026-06-26 16:40:48 +09:00
Hare 2df7a98dbf ticket: mark runtime config bundle sync done 2026-06-26 16:39:56 +09:00
Hare 7e8a8cfa4b merge: 00001KVZQHPNY runtime config bundles 2026-06-26 16:38:34 +09:00
Hare d2dfc186b1 ticket: approve runtime config bundle sync 2026-06-26 16:38:34 +09:00
Hare b6d7a34677 ticket: record config bundle boundary fixes 2026-06-26 16:34:11 +09:00
Hare 4867ab21bf fix: harden runtime config bundle boundary 2026-06-26 16:32:50 +09:00
Hare 0f8c6b80e3 ticket: request config bundle boundary fixes 2026-06-26 16:18:58 +09:00
Hare be396e59d9 ticket: record runtime config bundle implementation 2026-06-26 16:08:39 +09:00
Hare abab1af2f0 feat: add runtime config bundle sync 2026-06-26 16:06:58 +09:00
Hare 0c83d57727 ticket: start runtime config bundle sync 2026-06-26 15:35:33 +09:00
Hare 9a09ebd9ac ticket: accept runtime config bundle sync 2026-06-26 15:34:24 +09:00
Hare 3e550874ac ticket: record remote runtime cleanup 2026-06-26 15:31:00 +09:00
Hare 6c03220c1c ticket: mark remote runtime registry done 2026-06-26 15:30:13 +09:00
Hare bbb5d68c4c merge: 00001KVZSGT14 remote runtime registry 2026-06-26 15:29:18 +09:00
Hare f19ed64feb ticket: approve remote runtime registry 2026-06-26 15:29:18 +09:00
Hare 2d263278e6 ticket: record remote runtime debug redaction fix 2026-06-26 15:27:57 +09:00
Hare 38ff7d8f80 fix: redact observation source debug output 2026-06-26 15:27:08 +09:00
Hare 1bdb8f8a73 ticket: request remote runtime debug redaction 2026-06-26 15:21:40 +09:00
Hare 11f53c197a ticket: record remote runtime implementation 2026-06-26 15:16:41 +09:00
Hare aeb12b3b8e feat: add remote runtime registry source 2026-06-26 15:15:29 +09:00
Hare 71198821ae ticket: start remote runtime registry 2026-06-26 14:50:34 +09:00
Hare ec4ada9464 ticket: accept remote runtime registry 2026-06-26 14:49:45 +09:00
Hare 815b169757 ticket: record embedded runtime cleanup 2026-06-26 14:48:02 +09:00
Hare 5c592938f4 ticket: mark embedded runtime registry done 2026-06-26 14:47:18 +09:00
Hare e0cc7acf13 merge: 00001KVZSGT0Q embedded runtime registry 2026-06-26 14:46:31 +09:00
Hare 3d03ebccf8 ticket: approve embedded runtime registry 2026-06-26 14:46:31 +09:00
Hare 4616eb7254 ticket: record embedded runtime implementation 2026-06-26 14:41:23 +09:00
Hare c820928592 feat: add embedded workspace runtime registry 2026-06-26 14:40:07 +09:00
Hare a533d15bc6 ticket: start embedded runtime registry 2026-06-26 14:19:39 +09:00
Hare 7f312f1f6e ticket: accept embedded runtime registry 2026-06-26 14:18:50 +09:00
Hare bb8e09afa1 ticket: record websocket observation cleanup 2026-06-26 14:16:59 +09:00
Hare 35a5cf2887 ticket: mark websocket observation proxy done 2026-06-26 14:16:19 +09:00
Hare ae0f0d1d96 merge: 00001KVZKSTJT websocket observation proxy 2026-06-26 14:15:11 +09:00
Hare 009d59b3ee ticket: approve websocket observation proxy 2026-06-26 14:15:11 +09:00
Hare 9eaaedd08c ticket: record websocket diagnostic fixes 2026-06-26 14:11:03 +09:00
Hare 8cc9a594f7 fix: preserve runtime websocket diagnostics 2026-06-26 14:10:08 +09:00
Hare e67d884d62 ticket: request websocket diagnostic mapping fixes 2026-06-26 14:02:52 +09:00
Hare 6aba7dbbe0 ticket: record websocket observation implementation 2026-06-26 13:56:13 +09:00
Hare 9807accaf0 feat: add worker observation websocket proxy 2026-06-26 13:54:55 +09:00
Hare d3c9995e25 ticket: start websocket observation proxy 2026-06-26 13:23:32 +09:00
Hare 0c6d603128 ticket: accept websocket observation proxy 2026-06-26 13:22:34 +09:00
Hare 5e7cd8f3a8 ticket: record rest server cleanup 2026-06-26 13:20:40 +09:00
Hare 82850c344a ticket: mark worker runtime rest server done 2026-06-26 12:27:28 +09:00
Hare 660b07e8d7 merge: 00001KVZKSTE2 worker runtime rest server 2026-06-26 12:24:04 +09:00
Hare 15b3f002a3 ticket: approve worker runtime rest server 2026-06-26 12:24:04 +09:00
Hare 336f607536 ticket: record rest server binary fix 2026-06-26 12:21:34 +09:00
Hare d0db32fa6a fix: add worker runtime REST process binary 2026-06-26 12:20:37 +09:00
Hare a9fe199510 ticket: request rest server process wrapper 2026-06-26 12:14:49 +09:00
Hare 526ef640f0 ticket: record worker runtime rest server implementation 2026-06-26 12:10:55 +09:00
Hare 5b0d6551fa ticket: record sequential cleanup 2026-06-26 12:09:07 +09:00
Hare f43a6b8401 feat: add worker runtime REST server 2026-06-26 05:48:23 +09:00
Hare 8f67bd4d3e ticket: mark runtime registry foundation done 2026-06-26 05:44:33 +09:00
Hare fb023aab53 merge: 00001KVZKSV6C runtime registry foundation 2026-06-26 05:41:15 +09:00
Hare 749fe5d090 ticket: approve runtime registry foundation 2026-06-26 05:41:15 +09:00
Hare 7ea5568114 ticket: record runtime registry authority fix 2026-06-26 05:38:38 +09:00
Hare 15c2c38710 ticket: start worker runtime rest server 2026-06-26 05:38:09 +09:00
Hare 523b04d391 ticket: route websocket runtime queue chain 2026-06-26 05:37:09 +09:00
Hare 75a458ddd9 ticket: queue 00001KW04A8K6 2026-06-26 05:34:42 +09:00
Hare 22733deb15 ticket: queue 00001KVZSGT14 2026-06-26 05:34:35 +09:00
Hare 3a76967365 ticket: queue 00001KVZ9JGK0 2026-06-26 05:34:27 +09:00
Hare 7803a170b5 ticket: queue 00001KVZKSTJT 2026-06-26 05:34:20 +09:00
Hare 52f0099f74 ticket: ready websocket proxy and web console 2026-06-26 05:30:38 +09:00
Hare ee8fa17abd merge: orchestration planning returns
# Conflicts:
#	.yoi/tickets/00001KVZKSTJT/item.md
#	.yoi/tickets/00001KVZKSTJT/thread.md
2026-06-26 05:28:20 +09:00
Hare 471dc5bc52 ticket: refine websocket proxy planning 2026-06-26 05:26:33 +09:00
Hare 127bc18bd7 ticket: return web console stream planning 2026-06-26 05:23:24 +09:00
Hare 51d558a7a5 ticket: return websocket stream planning 2026-06-26 05:21:48 +09:00
Hare 15abcf6782 merge: orchestration runtime updates 2026-06-26 05:10:58 +09:00
Hare 243fb40092 ticket: ready runtime websocket stream 2026-06-26 05:10:54 +09:00
Hare f89552cafd ticket: update runtime migration planning 2026-06-26 04:59:15 +09:00
Hare 7110e078cd ticket: mark worker runtime fs store done 2026-06-26 04:49:07 +09:00
Hare 36ff72385c merge: 00001KVZKST83 worker runtime fs store 2026-06-26 04:46:07 +09:00
Hare 8d7ab0c053 ticket: approve worker runtime fs store 2026-06-26 04:46:07 +09:00
Hare d7c4396cd3 fix: scope workspace worker lookup by runtime 2026-06-26 04:45:22 +09:00
Hare fb8dc9fe51 ticket: record worker runtime fs store implementation 2026-06-26 04:41:55 +09:00
Hare 4071343996 feat: add worker runtime fs store 2026-06-26 04:40:58 +09:00
Hare 150d5c49eb ticket: request runtime registry authority fix 2026-06-26 04:37:50 +09:00
Hare f6fe9fba7f ticket: record runtime registry implementation 2026-06-26 04:33:14 +09:00
Hare f6fd7b6323 feat: add workspace runtime registry source boundary 2026-06-26 04:31:59 +09:00
Hare 928074fd64 ticket: resume accepted worker runtime branches 2026-06-26 04:25:03 +09:00
Hare 7d9fed8144 ticket: record spawn launcher blocker 2026-06-26 01:58:53 +09:00
Hare 40d4138068 ticket: accept next worker runtime branches 2026-06-26 01:56:16 +09:00
Hare 07a913f51f ticket: record worker runtime core cleanup 2026-06-26 01:54:24 +09:00
Hare 31c8d99187 ticket: mark worker runtime core done 2026-06-26 01:53:52 +09:00
Hare 56bdf95580 merge: 00001KVZBCQH4 worker runtime core 2026-06-26 01:52:55 +09:00
Hare 138b1fd860 ticket: approve worker runtime core 2026-06-26 01:52:50 +09:00
Hare 6a17366fcf ticket: record worker runtime lifecycle fix 2026-06-26 01:50:53 +09:00
Hare fbd358a195 fix: keep worker terminal lifecycle stable 2026-06-26 01:50:11 +09:00
Hare 9877a20778 ticket: record worker runtime continuation authority 2026-06-26 01:49:58 +09:00
Hare 579ab635cd merge: runtime routing updates 2026-06-26 01:46:39 +09:00
Hare f6159dc16e ticket: return runtime websocket stream to planning 2026-06-26 01:46:39 +09:00
Hare fb6f0ce068 ticket: request worker runtime lifecycle fix 2026-06-26 01:46:23 +09:00
Hare f3538dcd1f ticket: route runtime bundle and console blockers 2026-06-26 01:45:30 +09:00
Hare 1245ce027e ticket: queue 00001KVZ9JGK0 2026-06-26 01:44:45 +09:00
Hare 37c96b6ebd ticket: queue 00001KVZQHPNY 2026-06-26 01:44:39 +09:00
Hare 76b6b1dc4f merge: sync orchestration before queue 00001KVZQHPNY 2026-06-26 01:44:39 +09:00
Hare be8d190138 ticket: route worker runtime feature blockers 2026-06-26 01:44:24 +09:00
Hare 313cbd8bd8 ticket: queue 00001KVZKSTE2 2026-06-26 01:39:39 +09:00
Hare ae6076a5aa ticket: queue 00001KVZKST83 2026-06-26 01:39:26 +09:00
Hare 750ed74106 merge: sync orchestration before queue 00001KVZKST83 2026-06-26 01:39:25 +09:00
Hare f858e015b1 ticket: ready worker runtime followups 2026-06-26 01:39:23 +09:00
Hare 02423dad01 ticket: record worker runtime packaging fix 2026-06-26 01:37:29 +09:00
Hare 593db95175 fix: update nix cargo hash 2026-06-26 01:36:57 +09:00
Hare fc4153ae54 ticket: route backend runtime queue blockers 2026-06-26 01:32:57 +09:00
Hare 1966ec614d ticket: queue 00001KVZSGT0Q 2026-06-26 01:31:30 +09:00
Hare 0b665cd176 ticket: queue 00001KVZKSV6C 2026-06-26 01:31:28 +09:00
Hare 1e9ca19313 merge: sync orchestration before queue 00001KVZKSV6C 2026-06-26 01:31:28 +09:00
Hare 9b2cae32ea feat: add memory worker runtime crate 2026-06-26 01:31:09 +09:00
Hare d6c240af35 ticket: split backend runtime registry integration 2026-06-26 01:30:43 +09:00
Hare e64deceac7 ticket: start worker runtime core implementation 2026-06-26 01:23:28 +09:00
Hare f8d3b1cca9 ticket: accept worker runtime core routing 2026-06-26 01:21:59 +09:00
Hare 30363e5ed9 ticket: queue 00001KVZBCQH4 2026-06-26 01:20:10 +09:00
Hare 53c6799d4d merge: sync orchestration before queue 00001KVZBCQH4 2026-06-26 01:20:09 +09:00
Hare 089840e707 ticket: mark worker crate rename done 2026-06-26 01:19:33 +09:00
Hare 5dceaf9a72 ticket: refine worker runtime core plan 2026-06-26 01:18:21 +09:00
Hare b3db803c73 ticket: record dashboard routing pause 2026-06-26 01:18:09 +09:00
Hare 2a7e877584 merge: 00001KVZG9BMS worker crate rename 2026-06-26 01:15:29 +09:00
Hare 21e8d99494 ticket: approve worker crate rename 2026-06-26 01:15:19 +09:00
Hare b5e5f73071 ticket: record worker wording cleanup 2026-06-26 01:13:47 +09:00
Hare 60dbd724c5 fix: clean remaining worker wording 2026-06-26 01:13:11 +09:00
Hare 712425e3fc ticket: request worker wording cleanup 2026-06-26 01:11:40 +09:00
Hare 0b7a3c2392 ticket: record final worker wording fixes 2026-06-26 01:07:35 +09:00
Hare cb0c52e787 fix: update remaining active worker wording 2026-06-26 01:06:20 +09:00
Hare f75052eb8e ticket: request final worker terminology fixes 2026-06-26 01:00:50 +09:00
Hare 8e8f4f5a6d ticket: record worker rename guidance fixes 2026-06-26 00:58:46 +09:00
Hare da96d06f25 fix: remove stale pod guidance references 2026-06-26 00:57:27 +09:00
Hare 638bd7bcd6 ticket: request worker rename guidance fixes 2026-06-26 00:46:49 +09:00
Hare 6e638d1035 ticket: record remaining worker rename fixes 2026-06-26 00:44:26 +09:00
Hare 94c7aa793a fix: clean remaining worker rename references 2026-06-26 00:43:16 +09:00
Hare 0d296c72a9 ticket: request remaining worker rename fixes 2026-06-26 00:29:35 +09:00
Hare 07b4cffc54 ticket: record worker rename followup fixes 2026-06-26 00:26:22 +09:00
Hare ebf50baa94 fix: align worker rename followups 2026-06-26 00:25:03 +09:00
Hare 47e555ba80 ticket: request worker rename fixes 2026-06-26 00:15:37 +09:00
Hare befbabe13a ticket: split worker runtime implementation 2026-06-26 00:12:00 +09:00
Hare 137673045f ticket: record worker crate implementation report 2026-06-26 00:07:24 +09:00
Hare 6c59fe927b refactor: rename pod crate to worker 2026-06-26 00:05:57 +09:00
Hare ed0c22f959 ticket: record worker crate coder start 2026-06-25 23:16:34 +09:00
Hare 4c677640f4 ticket: accept worker crate rename task 2026-06-25 23:15:27 +09:00
Hare 0bf5b117da ticket: route worker crate rename task 2026-06-25 23:15:08 +09:00
Hare d93dbc0533 ticket: close completed work 2026-06-25 23:14:05 +09:00
Hare 9ee77b44ae ticket: queue 00001KVZG9BMS 2026-06-25 23:13:35 +09:00
Hare 20cfcfaca3 merge: llm engine rename 2026-06-25 23:10:27 +09:00
Hare b367abd76a ticket: plan worker runtime transition 2026-06-25 23:09:25 +09:00
Hare 6ab0d64fcb ticket: mark llm engine rename done 2026-06-25 22:57:39 +09:00
Hare 254ecccba2 merge: 00001KVZD10ED llm engine rename 2026-06-25 22:54:25 +09:00
Hare 4d8e022465 ticket: approve llm engine rename 2026-06-25 22:54:25 +09:00
Hare 50e2754e5e ticket: record llm engine implementation report 2026-06-25 22:47:33 +09:00
Hare 292fc4ea5d refactor: rename llm worker crate to engine 2026-06-25 22:46:26 +09:00
Hare 230b379979 ticket: record llm engine coder start 2026-06-25 22:28:33 +09:00
Hare 22598710fd ticket: accept llm engine rename task 2026-06-25 22:27:24 +09:00
Hare 1d6125e57d ticket: route llm engine rename task 2026-06-25 22:26:27 +09:00
Hare 193c868146 ticket: queue 00001KVZD10ED 2026-06-25 22:24:26 +09:00
Hare 1aa3a409cd ticket: plan llm engine rename 2026-06-25 22:23:50 +09:00
3220 changed files with 813684 additions and 230652 deletions
+2 -1
View File
@@ -1,6 +1,7 @@
/target
/result
/.direnv
/.worktree
/.yoi/dev
.worktree
*.local*
.env
-3
View File
@@ -1,3 +0,0 @@
/memory/
tickets/.ticket-backend.lock
/workspace.db*
-60
View File
@@ -1,60 +0,0 @@
---
title: "E2E テスト戦略"
state: "active"
created_at: "2026-06-09T07:09:26Z"
updated_at: "2026-06-09T07:09:26Z"
linked_tickets: ["00001KSKBP9YG"]
---
## Goal
Yoi の実プロセス・実 socket・実 provider 境界をまたぐ振る舞いを、通常の crate 内 unit / integration test だけに頼らず検証できる E2E テスト戦略を確立する。
最初の到達点は、実 `pod` / product binary を spawn し、protocol 経由で最小シナリオを実行し、graceful shutdown まで確認できる opt-in E2E harness を持つこと。その上で、permission、resume/fork、spawned Pod、provider stream、TUI/Panel などの重要境界を段階的に増やせる状態にする。
## Motivation / background
現状のテストは crate 内の in-process coverage が厚い一方で、以下の性質は単体テストだけでは十分に確認しづらい。
- 実プロセス spawn と runtime dir / socket / env の相互作用。
- Pod controller / protocol client / session store / metadata / restore の統合挙動。
- provider endpoint、streaming、auth/token、tool call、continuation、retry の実接続に近い振る舞い。
- permission deny、scope、manifest/profile 解決、child Pod delegation など、複数 crate と実 runtime state をまたぐ policy。
- TUI / Panel が前提にする Pod lifecycle や Ticket orchestration の外形。
E2E は常時実行の軽いテストではなく、dogfooding 中に「この機能は実 runtime でも壊れていない」と確認するための opt-in 検証基盤として必要。
## Strategy / design direction
- E2E は通常の `cargo test --workspace` からは外し、明示 feature / 専用 package / 独立 job で opt-in 実行する。
- まずはワークスペース直下の専用 E2E package / harness として設計し、個別 crate の unit test に押し込めない。
- protocol を喋る側は TUI の PTY 操作ではなく、typed client / protocol client を使う方向を優先する。
- provider 依存は最初から全部を対象にしない。
- 最小 harness では canned / fixture / mock HTTP server を使う。
- provider 差分は代表 provider から段階的に増やす。
- env / runtime dir / socket path は test ごとに隔離し、並列実行方針を明示する。
- 必要なら最初は `--test-threads=1` 相当で安全側に倒す。
- 将来的には per-test runtime dir と typed launch config で並列性を上げる。
- E2E は「全シナリオを大量に持つ」より、重要な runtime seam ごとに少数の高価値 scenario を置く。
- 失敗時 diagnostics は、secret を出さずに process phase、socket path、session id、log path、provider fixture id を辿れる形にする。
- E2E harness 自体が flaky にならないよう、network / time / external auth への依存は明示 opt-in に分ける。
## Success criteria / exit conditions
- `cargo test --workspace` では E2E が走らず、通常開発の feedback loop を重くしない。
- 明示コマンドで E2E harness を実行できる。
- 例: `cargo test -p e2e --features e2e` または後続で決める同等コマンド。
- 最小 scenario が実 `pod` / product binary を spawn し、protocol 経由で 1 turn 実行し、graceful shutdown まで通る。
- E2E 実行は専用 runtime/data dir を使い、通常の user/workspace state を汚さない。
- fixture / mock provider の設計があり、少なくとも 1 provider 相当の canned response を実 HTTP 経由で返せる。
- failure diagnostics から、spawn 失敗・socket 接続失敗・provider fixture 失敗・protocol 失敗・shutdown 失敗を区別できる。
- 後続 Ticket が permission / resume / fork / spawned Pod / provider streaming / Panel などを追加できる harness boundary がある。
## Decision context
- linked Ticket `00001KSKBP9YG` は、E2E harness の最初の concrete implementation Ticket として扱う。
- この Objective は E2E 全体の中長期方針・判断軸を保持する。個別 scenario の実装や harness の細部は concrete Ticket に分ける。
- TUI を直接 PTY で叩く方針は初期 harness では避け、protocol/client 経由を優先する。
- provider 全対応は初期 scope にしない。fixture / mock HTTP server を基礎にし、代表 provider から段階的に広げる。
- E2E は flakiness と実行コストが高いため、既定 CI / 既定 workspace test には入れず、opt-in 検証として始める。
- Objective context は判断材料であり、実装 authority は各 Ticket の body/thread/artifacts と明示的な Ticket relation / OrchestrationPlan に置く。
-73
View File
@@ -1,73 +0,0 @@
---
title: "ネイティブGUIアプリケーション"
state: "active"
created_at: "2026-06-10T07:41:18Z"
updated_at: "2026-06-10T07:41:18Z"
linked_tickets: []
---
## Goal
Yoi の Pod / Ticket / Orchestrator / workflow 操作を、TUI だけでなくネイティブ GUI から扱えるようにする。
最初の到達点は、既存の runtime / Ticket backend / Pod protocol / Profile / workflow authority を再実装せずに、workspace の状態を視覚的に把握し、選択した Pod・Ticket・role action に対して安全に操作できる desktop GUI client を持つこと。GUI は core authority ではなく client surface とし、既存 CLI/TUI と同じ durable state・同じ protocol・同じ permission/prompt/workflow 境界を使う。
## Motivation / background
現在の TUI / Panel は dogfooding 可能な状態まで進んでいるが、複数 Pod・複数 Ticket・Orchestrator 状態・session output・role launch・review/merge dossier を同時に扱うには、terminal UI の表示密度・視覚的状態表現・スクロール/選択/比較操作に限界が出ている。
ネイティブ GUI があると、以下をより自然に扱える。
- live / stored Pod、Ticket lane、Orchestrator progress、Companion/Intake 状態の同時表示。
- Ticket body/thread/artifacts、Pod output、validation evidence、diff/report の並列閲覧。
- composer target、role action、queue/routing/attach/restore の明確な affordance。
- long-running orchestration の通知、状態変化、失敗診断の視覚化。
- 将来的な review / merge-ready dossier / plan board / settings editor の専用 UI。
一方で、GUI を理由に runtime authority を分散させたり、Ticket/Pod state を独自 DB として二重管理したり、prompt/workflow 文字列を GUI code に直書きしたりしてはいけない。
## Strategy / design direction
- GUI は Yoi core の上に乗る client として作る。
- Pod lifecycle、session/history、Ticket storage、Profile resolution、workflow/prompt authority は既存 core を正とする。
- GUI 固有 state は selection、layout、local UI preference などに限定する。
- 最初に toolkit / architecture の小さな spike を置く。
- 評価軸は Rust code reuse、async/runtime 統合、native packaging、Linux dogfooding しやすさ、testability、accessibility、long-running log/output 表示、将来の cross-platform 余地。
- toolkit 選定は Objective では固定しない。候補比較と採用理由を Ticket に残す。
- 実装は段階的に進める。
1. read-only workspace dashboard: Pod / Ticket / Orchestrator 状態を既存 backend から表示する。
2. attach / restore / open など、既存 protocol に乗る低リスク操作を追加する。
3. composer と role action: Companion / Intake / Orchestrator / coder / reviewer launch を既存 launcher 経由で扱う。
4. Ticket body/thread/artifacts、Pod output、validation evidence、review report を閲覧しやすくする。
5. 必要に応じて settings/profile/config editor や merge-ready dossier UI を追加する。
- TUI は廃止前提にしない。
- GUI 導入後も CLI/TUI は fallback / automation / terminal-first workflow として維持する。
- GUI で見つかった state model の改善は、TUI と共有できる pure data model / client API に寄せる。
- Prompt / workflow / role guidance は GUI code に直書きしない。
- LLM-facing prompt は `resources/prompts` または `.yoi/workflow` / configured resources を正とする。
- GUI は prompt 文言を所有せず、選択・起動・runtime context の入力面を担当する。
- Security / privacy / authority boundary を保つ。
- secret-like data は UI diagnostics / logs / model context に漏らさない。
- permission / scope / profile の authority は既存 resolver/policy に従う。
- GUI convenience action は durable Ticket/Pod state transition と対応付け、暗黙の side effect を避ける。
## Success criteria / exit conditions
- 明示コマンドまたは binary で native GUI を起動できる。
- GUI は既存 workspace config、Profile、Ticket backend、Pod registry/protocol を使い、独自の authority store を持たない。
- 最小 dashboard で live/stored Pod、Ticket lane/state、Orchestrator/role session の概況を確認できる。
- GUI から少なくとも attach/restore/open 相当の安全な Pod 操作ができる。
- GUI から Ticket Intake または既存 role launcher を使った role action を実行でき、既存の prompt/workflow/resource 境界を壊さない。
- Pod output / Ticket body/thread/artifacts を、TUI より見通しよく閲覧できる最小 UI がある。
- GUI 固有 state と core durable state の境界が文書化されている。
- toolkit / architecture 選定理由、採用しなかった選択肢、packaging 方針が Ticket artifact または design note として残っている。
- GUI で使う state transformation / action eligibility は pure model として test 可能で、主要な selection/action state の unit test がある。
- GUI 実装は CLI/TUI の既存 workflow を破壊せず、必要な targeted validation が定義されている。
## Decision context
- この Objective は中長期の方向性・判断軸を保持する。具体的な toolkit 選定、crate 構成、初期 dashboard 実装、role action 実装、packaging は個別 Ticket に分ける。
- GUI は TUI の単純な置換ではなく、複数 Pod / Ticket / Orchestrator を扱う workspace cockpit として設計する。
- authority は既存 core に残す。GUI は client/view/controller surface であり、Pod/Ticket/workflow/prompt の正本を所有しない。
- Prompt 直書き禁止方針を守る。GUI 実装中に LLM-facing 文言が必要になった場合は、`resources/prompts` または workflow/resource 側に置く。
- 初期 target は dogfooding しやすい desktop GUI とし、public release / cross-platform polish / installer は後続段階で扱う。
-111
View File
@@ -1,111 +0,0 @@
---
title: 'MCP local stdio integration roadmap'
state: 'active'
created_at: '2026-06-10T07:48:45Z'
updated_at: '2026-06-20T05:34:00Z'
linked_tickets: ['00001KTR81P9X', '00001KV0SP0TY', '00001KVHR3WRF', '00001KVHR3WRY', '00001KVHR3WS6', '00001KVHR3WSD', '00001KVHR3WSN', '00001KVHR3WSW']
---
## Goal
Add MCP local stdio integration to Yoi without weakening Worker history, prompt-context, scoped tool permission, or Plugin/Feature layering invariants.
MCP is a protocol-backed integration layer on top of `pod::feature`. `pod::feature` supplies contribution/lifecycle/runtime-discovered registration substrate; MCP owns its own enablement, local server trust model, command/env/secret policy, and MCP-specific permission decisions. MCP is not the Plugin model, and Plugin permission policy is not implemented by feature-layer authority grants.
## Motivation / background
Yoi needs to integrate with external capability providers without turning them into hidden context sources or bypassing ordinary Tool/Worker safety rules. MCP is useful because it can expose tools, resources, and prompts from local protocol servers, but those server-provided declarations and results are untrusted and must be normalized through Yoi's existing authority boundaries.
The first MCP slice should focus on local stdio servers because they are concrete enough to implement and debug while keeping remote auth, OAuth, Streamable HTTP, registry distribution, sampling, and elicitation out of the initial trust boundary.
A configured local MCP server runs as a local executable. Yoi feature authority does not sandbox that executable's OS-level side effects, so command/env/secret handling and explicit local trust policy are MCP-layer responsibilities rather than generic `pod::feature` grants.
## Strategy / design direction
- Baseline the initial implementation on MCP specification `2025-11-25`.
- Start with local stdio MCP servers only.
- Treat MCP server metadata, tools, resources, prompts, and results as untrusted content.
- Do not allow MCP resources/prompts to become hidden context injection.
- They must be explicit tool operations with history records.
- Use the normal Yoi ToolRegistry, PreToolCall permission, history, and bounded result paths.
- Do not add private MCP-only bypasses around Worker/tool invariants.
- Keep sampling and elicitation fail-closed initially.
- Keep Streamable HTTP, remote auth, OAuth, and MCP Registry/distribution out of the first slice.
- Treat local stdio server execution as an explicit MCP config/trust decision, not as a `pod::feature` authority grant.
- Document clearly that a configured local MCP server runs as a local executable; Yoi feature authority does not sandbox its OS-level side effects.
### Layering decisions
- `pod::feature` is an API/contribution substrate.
- It owns contribution declarations, provider/service lifecycle hooks, diagnostics, runtime-discovered registration plumbing, and integration with normal Worker/ToolRegistry paths.
- It does not own Plugin permission policy or MCP server trust policy.
- Plugin is a user-facing package/config/runtime layer over `pod::feature`.
- Plugin permissions are Plugin-layer policy.
- Plugin package discovery/enablement must not be conflated with MCP local server execution.
- MCP is a separate feature-backed integration layer.
- MCP enablement, command/env/secret handling, server trust, and MCP-specific permission decisions live in MCP config/implementation.
- MCP provider-discovered tools/resources/prompts are exposed through the feature API and ordinary Yoi tool paths.
### Concrete implementation tickets
Completed prerequisites:
- `00001KTR81P9X` — Extend `pod::feature` API for external protocol-backed capability providers.
- `00001KV0SP0TY` — Remove feature-layer HostAuthority model.
Concrete MCP implementation sequence:
1. `00001KVHR3WRF` — MCP local stdio server config and trust policy.
- explicit config, command/env/secret redaction, local executable trust boundary, no auto-start.
2. `00001KVHR3WRY` — MCP stdio JSON-RPC lifecycle client.
- subprocess lifecycle, initialize/capability negotiation, diagnostics, shutdown.
3. `00001KVHR3WS6` — MCP tools/list registration into ToolRegistry.
- provider-discovered tools, stable namespacing, schema validation, untrusted metadata normalization, no tools/call yet.
4. `00001KVHR3WSD` — MCP tools/call execution through ordinary Tool path.
- PreToolCall gate before server call, bounded result serialization, history path.
5. `00001KVHR3WSN` — MCP resources/prompts as explicit tool operations.
- resources/list/read and prompts/list/get without hidden context injection.
6. `00001KVHR3WSW` — MCP list_changed notification handling.
- deterministic safe refresh/diagnostic behavior without breaking tool schema or prompt-cache invariants.
The old broad implementation Ticket `00001KTR82RB7` is superseded by this sequence and should not be used as an implementation work item.
### Terminology
Use `runtime-discovered` or `provider-discovered` for MCP tools/resources/prompts discovered from `tools/list`, `resources/list`, or `prompts/list`. Avoid `dynamic tools` / `dynamic registry` in new MCP design prose because those phrases imply that model-visible tool schemas may change during an active LLM run.
The intended invariant is:
```text
provider-discovered at startup / provider initialization;
registered into the ordinary ToolRegistry before model exposure;
run-stable for the duration of a model request/run;
refreshed only at a safe boundary or reported as a diagnostic.
```
### Later follow-ups
- Richer MCP task/task-support integration if ordinary tool-call fallback is insufficient.
- Streamable HTTP transport.
- OAuth / remote auth.
- Registry/package distribution.
- Explicit MCP/Plugin bridge only if separately approved; do not conflate Plugin packages with MCP local server execution.
## Success criteria / exit conditions
- A local mock MCP server can be configured explicitly and initialized.
- Discovered MCP tools appear as ordinary Yoi tools with stable namespacing.
- Tool calls go through ordinary permission and history paths.
- MCP resources/prompts are explicit operations, not hidden context injections.
- MCP result forms are bounded and safely serialized.
- Secret values, command/env details, and server diagnostics are redacted where required.
- Local server trust boundary is documented: Yoi does not sandbox the configured executable through feature authority.
- Feature, Plugin, and MCP permission/trust responsibilities are documented as separate layers.
## Decision context
- MCP is not the Plugin model; it is a protocol-backed integration layer using `pod::feature` substrate.
- `pod::feature` should provide contribution/lifecycle/runtime-discovered registration plumbing, not MCP server trust policy or Plugin package permission policy.
- MCP resources and prompts must never be hidden context injection. They are explicit operations recorded through ordinary history/tool paths.
- Provider-discovered tools are discovered at startup/provider initialization and registered before model exposure; model-visible schemas remain run-stable during a request/run.
- Local stdio server execution is a user/config trust decision. Yoi does not sandbox the local executable merely because it is configured through MCP.
-101
View File
@@ -1,101 +0,0 @@
---
title: "Plugin platform roadmap"
state: "active"
created_at: "2026-06-19T13:18:58Z"
updated_at: "2026-06-24T19:55:00Z"
linked_tickets: ["00001KV5R5V2S", "00001KV5W3PHA", "00001KV5W3PHW", "00001KV5W3PJ3", "00001KVFD3YSV", "00001KVFDX9AF", "00001KVFDX9AY", "00001KVG0HR96", "00001KVXHVCR5", "00001KVXK0WD3", "00001KVXK0WDH", "00001KVXK0WDQ", "00001KVXK0WDX", "00001KVXK0WE4", "00001KVXK0WEA"]
---
## Goal
Build Yoi's Plugin platform as a coherent extension system: packages are discovered and inspected safely, enabled explicitly, registered through typed Plugin surfaces, executed in a sandboxed runtime, constrained by Plugin-layer grants, and authored through SDK/templates rather than raw runtime ABI details.
The long-term platform goal is not merely to run Wasm. It is to make Plugin packages a durable, inspectable, permissioned, and authorable extension layer for Tools first, then host APIs (`https`, `fs`), and later Service / Ingress surfaces when concrete needs justify them.
## Motivation / background
The current Plugin foundation is already substantial:
- package discovery and explicit enablement resolver;
- Tool surface registration through the ordinary ToolRegistry/model-visible schema path;
- minimal sandboxed WASM Tool execution;
- Plugin permission grant enforcement;
- follow-up Tickets for read-only inspection CLI, `https`, `fs`, and Component Model migration.
The remaining work must be kept as one roadmap because the pieces constrain each other:
- Plugin authoring needs an SDK/PDK and examples, not raw pointer/length Wasm ABI hand-coding.
- `https` and `fs` host APIs must be grant-gated and shaped so they can move cleanly to typed Component Model interfaces.
- Diagnostics (`yoi plugin list/show`) are needed before the system becomes harder to debug.
- Component Model adoption should guide new host API design before a custom raw ABI becomes entrenched.
- Service / Ingress are useful for bridge-style integrations, but should come after Tool runtime, diagnostics, and host API policy are stable.
Research of common Wasm extension systems points to the same pattern: mature systems combine a package manifest, explicit capabilities, a sandbox runtime, host-provided capability APIs, language SDK/PDK bindings, templates/examples, inspection/check tooling, and versioned interfaces.
## Strategy / design direction
- Keep Plugin as a user-facing package/config/runtime layer above lower-level `pod::feature` substrate.
- `pod::feature` provides contribution/registration substrate.
- Plugin owns package discovery, enablement, grant policy, runtime selection, authoring UX, and user-facing diagnostics.
- Preserve authority boundaries.
- Package discovery is read-only inventory.
- Package presence never registers a Tool/Hook, executes Wasm, starts a Service, reads files, opens network, or injects context.
- Explicit enablement and Plugin grants are required before registration/execution/host API use.
- Tool calls/results continue through ordinary ToolRegistry and Worker history paths.
- Treat Component Model as the active Plugin runtime shape before public release.
- New typed Plugin host APIs should be designed in WIT-compatible terms.
- `runtime.kind = "wasm-component"` is the current Plugin runtime authority for new work.
- The earlier `yoi-plugin-wasm-1` raw core-Wasm compatibility bridge is retired from the active roadmap because Plugin has not been publicly released and compatibility would preserve the wrong boundary.
- Sequence the platform in usable layers:
1. Package discovery / explicit enablement / digest-pinned restore. Completed foundation.
2. Tool surface registration. Completed foundation.
3. Minimal WASM Tool execution. Completed foundation.
4. Permission grants. Completed foundation.
5. Read-only Plugin CLI inspection (`yoi plugin list/show`) for debugging discovery/enablement/grants/runtime metadata.
6. `https` and `fs` host APIs for Tool Plugins, grant-gated and WIT-compatible.
7. Remove the raw core-Wasm compatibility bridge and reject legacy runtime manifests.
8. Component Model runtime and authoring model become the only active Plugin runtime path.
9. Guest SDK/PDK, examples, `check`/`pack`/`new` authoring tooling target Component Model only.
10. Service / Ingress runtime is developed as host-managed lifecycle, event queue, output command, and diagnostics slices.
11. WebSocket support for long-lived integrations is host-owned connection driver + ingress event delivery + output command, not Plugin-owned polling with `recv(timeout)`.
- Keep Discord-style bridge goals split into two stages.
- Outbound Discord/webhook Tool is possible after `https`.
- Bidirectional Discord bridge requires Service + Ingress + WebSocket or inbound HTTP and host routing policy.
## Current implementation split
The broad Plugin runtime redesign is tracked by `00001KVXHVCR5` as context only; implementation should proceed through concrete Tickets instead of routing that umbrella as a single coding task.
1. `00001KVXK0WD3` Remove legacy raw WASM Plugin runtime.
- Deletes the active `LegacyToolAdapter` / raw-Wasm execution path.
2. `00001KVXK0WDH` Reject legacy Plugin runtime in manifest and CLI diagnostics.
- Makes `plugin.toml`, `yoi plugin check/list/show`, docs, and fixtures reflect Component Model only runtime authority.
3. `00001KVXK0WDQ` Define Plugin Service lifecycle and ingress queue runtime.
- Adds host-managed lifecycle, bounded queue, serial dispatch, backpressure, timeout, and diagnostics.
4. `00001KVXK0WDX` Add Plugin service output command model.
- Lets service handlers request side effects as grant-checked commands rather than ambient authority.
5. `00001KVXK0WE4` Add host-owned WebSocket driver for Plugin services.
- Converts incoming WS frames into ingress events and sends outbound frames through output commands.
6. `00001KVXK0WEA` Update Plugin WIT PDK templates for service event runtime.
- Aligns authoring API, WIT, PDK, templates, and docs with the new event/command execution model.
## Success criteria / exit conditions
- Users can inspect Plugin discovery/enablement/grant/runtime state through a read-only CLI without executing Plugin code.
- Plugin authors can build a Tool Plugin without writing raw memory/pointer ABI plumbing.
- Tool Plugins can safely call grant-gated `https` and `fs` host APIs.
- Component Model is the only active Plugin runtime path, with WIT-compatible host API types and measured packaging/runtime impact.
- Plugin grants remain authoritative over registration, execution, and host API calls.
- Plugin diagnostics explain missing package, invalid manifest, digest/version mismatch, missing grant, rejected schema, runtime mismatch, legacy runtime rejection, and unsupported host API cases safely.
- Raw core-Wasm Plugin compatibility is removed before public release; tests and docs no longer treat it as a current runtime.
- Documentation covers package format, Component Model runtime, host API authority, authoring SDK/templates, Service/Ingress event runtime, and operational debugging.
- Service/Ingress work is host-managed: services have lifecycle/status, ingress uses bounded queues, side effects are output commands, and WebSocket integrations use host-owned connection drivers.
## Decision context
- This Objective is roadmap context, not Ticket authority. Implementation still requires reading concrete Ticket bodies, threads, artifacts, and relations.
- Component Model direction supersedes Yoi's custom raw ABI as both long-term and current active Plugin runtime authority before public release.
- `https` / `fs` work should avoid choices that conflict with later WIT typed interfaces.
- Guest SDK work targets Component Model directly; raw ABI wrappers are not a supported transitional authoring path.
- Plugin and MCP remain separate. Component Model adoption for Plugin does not imply MCP server execution, MCP prompt/resource injection, or MCP trust policy changes.
- Plugin surfaces remain Tool / Hook / Service / Ingress; outbound side effects are Tool metadata and host API grants, not a separate surface.
-249
View File
@@ -1,249 +0,0 @@
---
title: "Team workspace control plane and runner architecture"
state: "active"
created_at: "2026-06-20T14:26:29Z"
updated_at: "2026-06-21T18:10:00Z"
linked_tickets: ["00001KVMFFYVX"]
---
## Goal
Yoi を、単一のローカル開発ディレクトリで動くエージェント実行ツールから、チームで作業・判断・実行結果を管理できるワークスペース基盤へ発展させる。
この Objective の中心は、Web から扱える管理システムを作り、その管理システムにローカル実行環境・リモート実行環境・将来のクラウド実行環境を接続できるようにすることである。管理システムは Ticket、Objective、Memory、Knowledge、Run、Artifact、Runner の正本を持つ。実行環境はその管理システムから仕事を受け取り、コード取得、作業用ディレクトリ作成、エージェント実行、検証、結果報告を行う。
この Objective は Git ホスティングサービスを作るものではない。Git は重要な Repository provider として扱うが、Yoi の Workspace は Git Repository root と同じものにしない。Yoi が作るべきものは、コード・ドキュメント・データ・成果物などの Repository と実行環境を接続しながら、人間とエージェントの作業、Ticket lifecycle、Memory/Knowledge、検証証跡、実行環境配置を管理するチームワークスペースである。
## Glossary
この Objective では、以下の語をこの意味で使う。
- Workspace: チームまたはプロジェクトの管理単位。Ticket、Objective、Memory、Knowledge、Run、Artifact、Policy、Actor、Repository を持つ。Git Repository root ではない。
- Control plane: Workspace の正本を持ち、Web UI / API / CLI から操作される管理システム。
- Runner: Control plane から仕事を受け取り、実際にエージェントやツールを動かす実行環境。最初はローカルマシン上の runner、後でリモート runner やクラウド runner を追加する。
- Repository: Workspace に接続される source/storage。コード、ドキュメント、local directory、object storage、artifact store、dataset などを含む。Git Repository も Repository の一種であり、基本的には filesystem path ではなく URI / URL で識別する。
- Repository provider: Repository の種類ごとの実装。Git、local filesystem、object store、artifact store、将来の non-Git VCS など。
- RepositoryPoint: Repository 内の特定地点。Git commit/ref/path、object store version/prefix、file snapshot/path など、provider ごとの revision/ref/snapshot/path を表す。
- Execution Workspace: Runner が Run のために作る作業用ディレクトリや container filesystem。1 つ以上の RepositoryPoint から materialize される。Git worktree、clone、sparse checkout などはこれを作る手段である。
- Ticket: チームで扱う作業単位。目的、要件、判断、議論、完了条件、関係、証跡を持つ。
- Objective: 複数の Ticket を束ねる長期目標や設計方針。
- Run: Ticket や Objective に対して行われた具体的な実行試行。どの Runner が、どの Execution Workspace で、何を実行し、どんな結果になったかを持つ。
- Artifact: Run や Ticket に紐づく成果物や証跡。diff、log、validation result、review result、report など。
- Memory: エージェントやユーザーが再利用するための要約された文脈。Ticket や Run の正本ではない。
- Knowledge: 保守された知識や設計判断。Memory より人間が維持する資料に近い。
- Actor: 人間、エージェント、システム、外部サービスなど、Workspace 上で操作や発言を行う主体。
## Motivation / background
現在の Yoi は、ローカルの `.yoi` ディレクトリ、ローカルプロセス、Ticket ファイル、ワークツリー運用によって、自分自身の開発に使えるエージェント実行環境になっている。しかし、チーム利用、Web UI、リモート実行、クラウド実行、最終的な SaaS 提供を考えると、次の前提を変える必要がある。
- Workspace を Git Repository root と同一視しない。
- ローカル filesystem 上の `.yoi` を、長期的なチーム用正本 store にしない。
- Ticket をローカル作業メモではなく、チームの作業調整 record にする。
- Ticket と実行試行を分ける。実行試行は Run として記録する。
- 管理システムと実行環境を分ける。
- まず Web から Ticket、Objective、Memory、Knowledge、Run、Artifact、Runner state を見られるようにする。
- 最初はローカルマシンを Runner として使い、後でリモート Runner、クラウド Runner、runner pool、resource allocation、quota、billing、sandboxing に拡張する。
- Git ホスティング機能を取り込むのではなく、Git Repository / worktree / clone は Repository provider と Execution Workspace materialization の手段として扱う。
OSS として Control plane、Runner、Web frontend、protocol を公開しつつ、managed service では hosted control plane、runner fleet、リソース柔軟性、team auth、backup、audit、availability、multi-tenant operations で価値を出す。
## Strategy / design direction
### 1. Control plane を先に作る
Team Workspace の正本は server-side control plane に置く。`.yoi` は local backend、single-user/self-hosted compatibility、offline/export/import、runner-local projection、migration bridge として残せるが、multi-user SaaS の正本とはみなさない。
Control plane は Ticket、Objective、Memory、Knowledge、Run、Artifact、Actor、Permission、Audit、Runner state を管理する。Web UI、CLI、TUI、将来の desktop client は、この Control plane を操作する client であり、別の正本 store を持たない。
### 2. Workspace と Repository を同一視しない
Workspace はチームまたはプロジェクトの作業管理単位である。Repository は Workspace に接続される source/storage である。Git Repository は Repository の一種にすぎない。
1 つの Workspace は複数の Repository を持てる。Repository は filesystem path ではなく URI / URL で識別する。例として `git+https://...`、`file://...`、`s3://...`、`artifact://...`、将来の VCS provider URI などを扱えるようにする。
Ticket と Objective は Repository 配下に置かず、Workspace 配下に平たく持つ。Ticket は必要に応じて対象 Repository、ref selector、path、必要 capability を持つ。Objective は複数 Ticket にまたがる target default / scope hint を持てるが、Repository の所有物にはしない。
Run は Ticket の target selector を具体的な RepositoryPoint に解決し、その RepositoryPoint から Execution Workspace を materialize する。Git worktree 相当の機能は、この Execution Workspace を作るための実装戦略として扱う。
短期的には Git を主な Repository provider とする。ただし Yoi の authority model を Git object、Git branch、Git Repository root、worktree path に固定しない。Orchestration は Git そのものではなく、`resolve_ref`、`materialize`、`diff`、`patch`、`commit`、`merge` などの Repository capability に依存する。
### 3. Ticket を team coordination record にする
Ticket は実行そのものではない。Ticket は「何を、なぜ、どの条件で完了とみなすか」を持つ。Ticket は Workspace に平たく所属し、Repository には所属しない。コードやドキュメントを対象にする Ticket は、対象 Repository / ref selector / path / intent を target として持つ。
Ticket target は intent/selector であり、実行再現性のための immutable point ではない。Run が target selector を concrete RepositoryPoint に解決し、実際にどの revision/snapshot を materialize したかを記録する。
```text
Ticket
-> target selectors: Repository + ref selector + path + intent
-> Run / Attempt
-> resolved RepositoryPoint
-> Execution Workspace
-> Artifact / Evidence
-> Review / Decision
-> Audit / Notification
```
Target 例:
```text
Ticket targets:
- repository: main-code
role: primary
ref: develop
paths: ["crates/pod/"]
intent: change
- repository: docs
role: related
ref: main
paths: ["docs/development/"]
intent: read
Run inputs:
- repository: main-code
requested_ref: develop
resolved_point: git commit abc123
mount: /workspace/main-code
```
Ticket には次の概念が必要になる。
- Actor identity: human / agent / system / service account.
- Assignment / owner / reviewer / watcher.
- Typed thread events: comment, decision, plan, review, implementation report, state transition.
- Linked Objective / Artifact / Run / Repository / RepositoryPoint / Execution Workspace.
- Permission / visibility.
- Audit trail.
- Notification / mention.
- Board / queue / planning / review / done / archived views.
- Conflict handling and concurrent editing policy.
### 4. Memory / Knowledge の本格再設計は後回しにする
Memory / Knowledge は Ticket / Run / Artifact のコピーではない。再利用可能な文脈、方針、学習された制約、保守された知識として扱う。ただし、Memory の意味論・抽出・承認・検索・staleness 処理を今この Objective で先に作り込まない。
理由は、Memory の正しい設計が Workspace control plane の record model、Actor / visibility / permission、Ticket と Run の分離、Artifact / evidence、RepositoryPoint、Runner に渡す context の監査方法に依存するためである。これらが固まる前に Memory schema だけを作ると、local `.yoi` 前提や現行 agent runtime 前提に引っ張られ、後で再設計が必要になる。
この Objective では、Memory / Knowledge について以下の platform contract だけを維持する。
- Memory / Knowledge は Control plane が扱う record だが、Ticket / Run / Artifact の authority を置き換えない。
- 将来、Memory / Knowledge の canonical storage は Workspace control plane 側に置く。
- local `.yoi` memory は compatibility、offline/export/import、runner-local projection、migration bridge として扱う。
- Personal Memory、Workspace Memory、Run Summary、Maintained Knowledge は分離が必要である。
- Generated Memory には provenance、visibility、approval、audit が必要である。
- Runner / agent に渡した Memory/Knowledge context は、将来 ContextPack などとして Run に記録できる必要がある。
本格的な Memory 再設計は、Memory の保存先を Workspace backend / control plane record に移すタイミングで回収する。それまでは低リスクな観察、問題例の収集、既存 local memory の互換維持に留める。
### 5. 管理システムと実行環境を弱結合にする
Control plane は正本と調整を持つ。Runner は実行を担当する。
初期形:
```text
Web UI / Control Plane
-> Runner connection
-> Local machine runner
-> Existing Yoi runtime, tools, working copy, build/test commands
```
この段階では、現在ローカル管理画面が行っている Ticket 選択、エージェント起動、レビュー起動、作業用 checkout 作成、検証実行、結果表示を、Web/control plane から local runner に対して実行できるようにする。
その後で、remote runner、self-hosted runner、hosted cloud runner、runner pool、resource allocation、quota、billing、sandbox、network policy、secret distribution を追加する。
```text
Phase 1: Web control plane + local runner
Phase 2: Remote/self-hosted runner
Phase 3: Hosted cloud runner fleet
Phase 4: Resource allocation / scheduling / quotas / billing / isolation
```
### 6. Web frontend を先に作る
Desktop app は対応コストが高いので、まず Web frontend を primary UI とする。
- Web: チームで使う主要 UI。
- CLI: automation、scripting、local operations。
- TUI/local panel: local runner cockpit、fallback、dogfooding surface。
- Future desktop: Web/control-plane model が安定した後に検討する optional client。
Web UI は Ticket、Objective、Memory、Knowledge、Run、Runner、Artifact を扱う。UI の都合で正本を二重化しない。
### 7. 多重起動コストと runtime placement を見直す
Cloud/remote execution を成立させるには、多数のエージェント実行を安く管理できる必要がある。logical agent session と runtime process/resource placement を分ける。
初期 Workspace DB では、Worker を canonical table として永続化しない。Host / Worker 一覧は backend-local runtime inspection や将来の Host protocol から逐次取得する live view とし、Ticket に関わった Worker は Ticket thread events と WorkerRef snapshot / TicketWorkerLink として記録する。
Worker の一元管理、データ永続化、アーカイブは将来的には必要になる。これは Host protocol、remote/self-hosted/hosted worker lifecycle、worker identity、retention policy、audit requirements が固まった後に、dedicated Worker registry / archive model として追加する。v0 で Pod metadata の代替として Worker table を作らない。
検討対象:
- Agent identity と process/runtime placement の分離。
- Provider client、tool registry、resource cache の共有可能性。
- Prompt/resource/profile resolution cache。
- Model call multiplexing and scheduling。
- Tool execution sandbox reuse。
- Plugin instance / Service runtime との統合。
- Session/event stream と runtime lifecycle の分離。
- Runner-local cache、checkout reuse、build cache、dependency cache。
## Initial phases / candidate tickets
1. **Vocabulary / architecture record**
- Workspace / Repository / RepositoryPoint / Execution Workspace / Runner / Control Plane / Run / Ticket / Memory / Knowledge の用語と境界を固める。
2. **Team-space canonical data model**
- Ticket / Objective / Target / Run / Artifact / Actor / Permission / Audit / Memory / Knowledge の entity/event model を設計する。
3. **Ticket and Run separation**
- Ticket lifecycle と execution attempt / orchestration run / validation run を分離し、Ticket thread と Run evidence の責務を明確化する。
4. **Memory storage migration boundary**
- Memory / Knowledge の本格再設計は後回しにし、まずは Workspace backend に移す時の platform contract、compatibility/cache/export 方針、将来の provenance / visibility / approval 要件だけを固定する。
5. **Control plane backend architecture**
- local `.yoi` backend と server-side canonical backend の境界、migration/export/import、compatibility mode を設計する。
6. **Web control plane MVP design**
- read-only Ticket / Objective / Memory / Knowledge / Runner state UI/API の範囲を決める。
7. **Local runner protocol design**
- Web/control plane から local runner に安全な操作を送る protocol と authority boundary を設計する。
8. **Repository and Execution Workspace materialization model**
- Repository URI、Repository provider capability、RepositoryPoint resolution、Git worktree / clone / sparse checkout / future source backend を runner-side strategy として抽象化する。
9. **Remote/hosted runner foundation**
- runner registration, heartbeat, capability advertisement, job assignment, logs/events, secrets, sandbox/resource policy を設計する。
## Non-goals
- Git hosting service を作ること。
- `.yoi` filesystem をそのまま SaaS canonical store にすること。
- 最初から full hosted cloud execution を作ること。
- local execution / CLI / TUI / local panel を捨てること。
- Ticket を単なる issue tracker clone にすること。
- Memory を Ticket/Run audit log の代替にすること。
- Web UI のために core authority を二重化すること。
- hidden server state を LLM context に直接注入すること。
- multi-tenant auth/billing/secret/security を shortcut して実装すること。
## Success criteria / exit conditions
- Workspace / Repository / RepositoryPoint / Execution Workspace / Runner / Control Plane / Run / Ticket / Memory / Knowledge の境界が文書化されている。
- Ticket が team coordination record として、target selector / Run / Artifact / Actor / Permission / Audit と分離された model を持つ。
- `.yoi` local backend は compatibility/local backend として整理され、server-side canonical backend の設計を阻害しない。
- Web UI/API が Ticket / Objective / Runner state を中心とした read-only view を提供できる設計または MVP を持つ。Memory / Knowledge は既存 record の表示または将来 placeholder に留め、本格再設計をこの段階の必須条件にしない。
- Control plane から local runner に対して、現在のローカル管理画面相当の安全な操作を実行できる design/protocol がある。
- Git Repository root に依存しない Workspace model があり、Git Repository は Repository provider の一種として扱われている。
- Ticket と Objective は Workspace 配下に平たく存在し、Repository への所属ではなく target selector / scope hint で対象を表現する。
- Git worktree 相当は Execution Workspace materialization strategy として扱われ、Run が immutable な RepositoryPoint を記録する。
- Memory / Knowledge は Ticket / Run / Artifact の authority を置き換えない record として platform contract だけを持つ。本格的な意味論・抽出・承認・検索・staleness 処理は、Memory の保存先を Workspace backend / control plane record に移すタイミングで回収する。
- Hosted runner / resource allocation / SaaS offering に進むための後続 Ticket が切れる状態になっている。
- 既存 local dogfooding runtime を壊さず、local use と remote-capable architecture が両立している。
## Decision context
- Yoi は hosted Git tool ではなく、team workspace control plane + execution environment として設計する。
- Team-space の長期 canonical authority は server-side control plane に置く。local `.yoi` は互換/local/offline/export/import surface だが、multi-user SaaS の正本ではない。
- 実行環境と管理システムは弱結合にする。まず管理システムを独立させ、local runner を実行環境として接続する。その後に remote/self-hosted/hosted runner fleet へ進む。
- Web frontend を最初の primary team UI とする。Desktop app は web/control-plane model が安定した後に検討する。
- Git は重要な Repository provider / materialization backend として使うが、Workspace identity と authority を Git Repository root に固定しない。
- Ticket と Objective は Workspace 配下に平たく持つ。対象コードベースや ref は Repository target selector として表現し、Run が concrete RepositoryPoint に解決する。
- Memory の本格再設計は後回しにする。先に Workspace / Ticket / Repository / Host/Worker live view / Control plane の基盤を固め、Memory の保存先を Workspace backend に移すタイミングで、意味論・抽出・承認・検索・staleness 処理をまとめて回収する。
- Worker の一元管理・データ永続化・アーカイブも後続設計に回す。初期 DB では Worker を Pod metadata の代替として永続化せず、live view と Ticket-linked WorkerRef 記録に留める。
-268
View File
@@ -1,268 +0,0 @@
---
title: "効果的な Memory システム設計・検証"
state: "active"
created_at: "2026-06-20T15:16:00Z"
updated_at: "2026-06-20T15:16:00Z"
linked_tickets: ["00001KSKBPHRG", "00001KT02TCCG", "00001KTGCAFXG", "00001KSKBPTHR"]
---
## Goal
Yoi の Memory / Knowledge / generated memory / resident context / retrieval / usage metrics を、実際の開発・設計・レビュー・オーケストレーションに効く sensemaking substrate として再設計・検証する。
この Objective でいう「効果的な Memory システム」は、単に多く保存する仕組みではなく、作業中の問いに対して relevant material を集め、根拠を検証可能にし、再表現・仮説形成・反証探索・意思決定・成果物への反映を低コストにする仕組みである。
暫定的な定義:
- foraging cost を下げる: Ticket / Objective / current question に対して、関連する memory / docs / tickets / session evidence / code references を探しやすい。
- evidence を失わない: Memory が authority そのものにならず、Ticket / docs / git history / session logs / user instruction への検証可能な入口になる。
- schema 化を支援する: raw summary ではなく、subsystem、invariant、risk、authority boundary、open question、rejected alternative、hypothesis など推論しやすい形へ再表現できる。
- hypothesis loop を支援する: 支持証拠だけでなく、代替仮説・棄却理由・反証 evidence・stale assumption を扱える。
- product に戻る: Memory に保存して終わりではなく、Ticket、review、docs、implementation、decision、report に影響を戻せる。
- stale / contradiction を扱う: 古い前提、矛盾、適用範囲外の memory を検出・降格・更新できる。
- usage を成果基準で測る: resident exposure や read count ではなく、判断・レビュー・実装・docs に効いたかを観測できる。
## Motivation / background
現在の Memory システムは「墓場化」している。保存された情報はあるが、後続の作業で自然に使われにくく、使われたとしても根拠・適用範囲・鮮度・反証可能性が弱い。結果として Memory は、作業場ではなく古い結論の倉庫になりやすい。
Pirolli & Card 2005 の sensemaking model では、分析作業は単なる保存ではなく、次の変換として捉えられる。
```text
external data sources
-> shoebox
-> evidence file
-> schema / representation
-> hypotheses
-> presentation / product
```
Yoi の現行 Memory は、この流れのうち「保存」と「一部の検索」には対応しているが、少なくとも以下が弱い。
- Ticket / task / question ごとの shoebox がない。
- shoebox から evidence snippets を切り出し、source / provenance / applicability / confidence と共に扱う evidence file がない。
- `summary`, `decision`, `request`, `knowledge` は storage taxonomy であり、sensemaking 用 schema としては粗い。
- decision は残るが、hypothesis space、alternative、rejected reason、disconfirming evidence が残りにくい。
- reviewer / orchestrator が confirmation bias を避けるための反証探索導線が弱い。
- resident exposure と explicit retrieval は観測できても、Memory が product に効いたかは測りにくい。
この Objective は、Memory 関連の設計・検証・検討・考察を一元化し、個別 Ticket がばらばらに storage、prompt、retrieval、metrics を改善して再び墓場を増やすことを防ぐための判断背景である。
## Strategy / design direction
Memory を「長期保存領域」ではなく、Yoi の multi-agent 開発における sensemaking loop の支援機構として設計する。
### 1. Pirolli & Card の stage に合わせて責務を分ける
- external data sources: Tickets、docs、git history、session logs、reports、code、user instructions。
- shoebox: 特定 Ticket / Objective / design question に対して関連しそうな材料を集めた task-bound working set。
- evidence file: shoebox から抜き出した根拠 snippet。source anchor、支持/反証、適用範囲、confidence、staleness を持つ。
- schema / representation: subsystem、invariant、risk、authority boundary、open question、hypothesis、alternative、contradiction など、推論しやすい再表現。
- hypotheses: 採用前の設計仮説、代替案、棄却条件、反証 evidence。
- product: Ticket、review、docs、implementation、decision、report、orchestration plan などの成果物。
### 2. 最初の重点は task-bound shoebox と evidence file
Memory 墓場化の最初の原因は、保存情報が現在の問いに集まらないことである。まずは Orchestrator / Intake / Reviewer が Ticket を扱う時に、関連 memory / docs / tickets / reports / prior decisions を shoebox として束ねる導線を作る。
この段階では大きな永続 schema 追加に飛びつかず、report / Ticket artifact / bounded generated context として検証してよい。
### 3. Memory を authority にしない
Memory は Ticket、docs、git history、session logs、user instruction の代替ではない。Memory は authority record への evidence index / schema / reasoning aid として扱う。
したがって、改善案は次の性質を持つべきである。
- source / provenance を辿れる。
- stale / superseded / contradicted を扱える。
- Memory の断定をそのまま authority として使わない。
- Ticket body/thread/artifacts を読まずに Objective や Memory だけで実装判断できる状態を作らない。
### 4. 反証探索を first-class にする
より効果的な Memory は、過去方針を思い出すだけでなく、現在案を疑うために使える必要がある。
Reviewer / Orchestrator / Intake の導線では、次を探せるようにする。
- supporting evidence
- contradicting evidence
- stale decisions
- rejected alternatives
- unresolved questions
- authority boundary risks
- prior failures / reports
### 5. Metrics は exposure から product impact へ寄せる
Memory が prompt に入った、または query されたことは成功ではない。評価は次を区別する。
- resident exposure
- explicit retrieval
- cited in response
- cited in Ticket / review / report
- changed requirement
- changed implementation
- contradicted / invalidated
- led to docs or decision update
### 6. 後続 Ticket は concrete slice に分割する
この Objective は中期的な設計・検証の一元化 record であり、umbrella Ticket ではない。実装や調査は、単独で実装・レビュー・close できる concrete Ticket に分割する。
候補 slice:
- Memory sensemaking 分析 report を `docs/report/` に作る。
- Ticket routing 用 Memory shoebox artifact を試作する。
- evidence snippet schema / source resolver を設計する。
- hypothesis / rejected alternative / disconfirming evidence の表現を追加する。
- Reviewer workflow に反証探索を入れる。
- Memory usage metrics を product impact oriented に拡張する。
- stale / contradiction / renewal の検出・表示を設計する。
## Success criteria / exit conditions
- Memory システムの目的が「保存」ではなく「sensemaking loop 支援」として project records / docs / prompts / workflows で一貫して説明されている。
- Pirolli & Card の `shoebox -> evidence file -> schema -> hypotheses -> product` に対応する Yoi 内の責務と非責務が整理されている。
- Ticket / Objective / docs / session logs / Memory / Knowledge の authority boundary が明確で、Memory が authority を僭称しない。
- 少なくとも一つの実作業 routing / review / design analysis で、task-bound shoebox または evidence file が生成・利用され、作業品質にどう効いたかが確認されている。
- Memory records または関連 artifacts が source / provenance / applicability / staleness / supports-or-refutes のいずれかを扱えるようになっている。
- Reviewer / Orchestrator が supporting evidence だけでなく、contradicting evidence / stale assumptions / rejected alternatives を探す導線を持っている。
- Memory usage metrics が resident exposure と product impact を区別している。
- 古い Memory が放置されるのではなく、stale / superseded / contradicted / needs-review として扱える方針がある。
- 後続の実装 Ticket が concrete slice として分割され、Objective が Ticket dependency や進捗 container として使われていない。
この Objective は、Memory が少なくとも一つの中規模設計・実装・レビュー作業で「関連情報を見つける」「根拠を確認する」「代替案/反証を検討する」「成果物へ反映する」流れを実証し、その設計方針が docs / workflows / metrics に反映された時点で `done` を検討できる。
## Decision context
- ユーザー指摘: 「Memoryシステムが完全に墓場化している」。これは保存量不足ではなく、保存情報が現在の問い・根拠・仮説・成果物に接続されない問題として扱う。
- ユーザー指示: Memory システムの設計・検証・検討・考察を Objective にまとめ、より効果的な Memory システムを作成する目標のもとで情報を一元化する。
- 「効果的」の定義は未確定だが、当面は Pirolli & Card の sensemaking process に沿って、foraging cost、evidence quality、schema usefulness、hypothesis/disconfirmation support、product impact、staleness handling を評価軸にする。
- Memory は durable project authority ではない。Ticket、docs、git history、session logs、明示 user instruction の代替として使わない。
- Objective context は判断背景であり、個別実装の authority は各 Ticket body/thread/artifacts と明示的な Ticket relations / OrchestrationPlan records にある。
- `history` に残らない context-only injection を改善案にしない。新しい context input は history に commit する原則を守る。
- Knowledge は単なる長期保存ではなく、再利用可能な schema / model / procedure / invariant として再検討する余地がある。
- Generated memory / curated Knowledge / Ticket / docs / report の境界を再定義する場合は、authority boundary と migration/staleness を明示する。
- 関連する既存 Ticket:
- `00001KSKBPHRG` — Prompt / Workflow 評価メトリクスと改善 Offer
- `00001KT02TCCG` — Memory prompt: conditional guidance and proactive lookup
- `00001KTGCAFXG` — Use .yoi/memory marker for repo-local memory root
- `00001KSKBPTHR` — ワークスペースのメモリーをLintするヘッドレスCLI
## Historical references / prior design sources
現在の Memory システムの初期設計時には、Codex Memories / Chronicle と HermesAgent を明示的な参考事例として調査していた。関連する調査・設計記録は、現在は主に以下に退避されている。
- `docs/.local/old-docs/ref/memory-systems.md`
- `docs/.local/old-docs/plan/memory.md`
- 初期設計 commit: `ca5a3d11` — `2026-04-21 メモリシステムの設計`
- 関連 commit:
- `0c1276b7` — `Memoryシステムの整理・Promptカタログチケット`
- `3d04f793` — `memoryを抽出する仕組みの実装`
- `f1b7af62` — `docs: memoryシステムの仕様変更と、動的Tool・VCSの話`
- `a2aecbf0` — `update: memoryシステムの"Phase"表記を撤廃`
### Codex Memories / Chronicle から得た設計要素
旧設計では、Codex Memories / Chronicle を `extract -> staging -> consolidation -> durable Markdown memory` の非同期パイプラインとして捉えていた。
主な参照点:
- extract と consolidation の 2 段構成。
- extract は JSON schema / structured output で分類ブレを抑える。
- consolidation は reasoning model / agentic rewrite によって、既存 memory と staging entries を統合・整理する。
- staging と durable memory を分ける。
- `MEMORY.md` は retrieval-oriented handbook として扱う。
- `memory_summary.md` は prompt-loaded high-signal context として扱う。
- `raw_memories.md` は routing layer / task inventory 的な中間層として扱う。
- workspace diff や usage 情報を使い、stale / deleted evidence / noisy entries を整理する。
- consolidation は append だけでなく、rewrite / merge / split / trim / drop / cleanup を担う。
Yoi 初期設計では、これを参考に以下を意図していた。
- activity token 閾値で extract を発火する。
- compact より前に session log range を抽出する。
- extract は `decisions`, `discussions`, `attempts`, `requests` などの候補を staging に保存する。
- 抽出時点では Knowledge 化せず、純粋な「起きたこと」に寄せる。
- consolidation が summary / decisions / requests / knowledge candidates を整理する。
- consolidation 入力に linter warnings / usage metrics / Knowledge 化候補を含める。
- stale / superseded / unused / noisy な情報を整理する。
この Objective での再解釈:
- Codex の `raw_memories.md` は、Pirolli & Card の sensemaking model では `shoebox` または `evidence file` に近い。
- Yoi は extract / consolidation という pipeline だけを継承しても不十分であり、task-bound shoebox / evidence file / hypothesis loop / product feedback がなければ Memory は再び墓場化する。
- 特に、staging を consolidation の一時入力としてだけ扱うと、後続 Ticket / Objective / review が使う探索入口にならない。
- Yoi では `raw memories` 相当の中間層を、現在の問いに紐づく working set / evidence index として再設計する必要がある。
### HermesAgent から得た設計要素
旧設計では、Nous Research HermesAgent を 3 層の memory system として整理していた。
- Persistent Memory:
- `MEMORY.md` / `USER.md`
- Markdown + SQLite / FTS5 session search
- 起動時 system prompt snapshot
- bounded character limits
- Skill Library:
- procedural memory
- `~/.hermes/skills/<name>/SKILL.md`
- `skill_manage` tool による agentic CRUD
- User Model / Honcho:
- dialectic user modeling
- 外部 service 連携
HermesAgent で特に重要だった点:
- memory / skill review は一定 turn / tool iteration ごとに background agent として起動する。
- 保存すべきものがなければ `Nothing to save.` で NOP として終了する。
- Yoi extract の「空配列許容」はこの設計からも影響を受けている。
- memory は session start 時の frozen snapshot として system prompt に入り、mid-session write で prompt cache を壊さない。
- persistent memory は bounded で、limit 超過時は deterministic eviction ではなく、agent に replace / remove を促す。
- procedural memory / skills は一般 memory から分離されている。
- SQLite FTS5 + LLM summarization による cross-session recall がある。
この Objective での再解釈:
- HermesAgent の `MEMORY.md` / `USER.md` / `skills` の分離は、Yoi の Knowledge / Workflow / prompt resource / docs / Ticket decision / generated memory の責務再整理に使える。
- reusable procedure, reviewer focus, orchestration tactic, project preference, user preference, design invariant を同じ Memory bucket に入れると墓場化しやすい。
- `Nothing to save.` / empty extraction allowed は重要だが、保存抑制だけでは効果的な Memory にはならない。保存されたものが task-bound shoebox / evidence / schema / hypothesis / product に接続される必要がある。
- frozen snapshot / prompt cache 配慮は Yoi の history/context 加工原則と整合するが、それだけでは retrieval / resurfacing / disconfirmation は解決しない。
### Lessons for the next design iteration
Codex と HermesAgent の調査から、Yoi が継承すべきものと、継承するだけでは足りないものを分ける。
継承すべきもの:
- structured extract と agentic consolidation の分離。
- staging / raw memories / durable memory の分離。
- 保存対象がなければ NOP にする発火設計。
- prompt-loaded summary と durable retrieval-oriented memory の分離。
- stale / noisy / unused entries の cleanup。
- procedural memory と declarative memory の分離。
- session search / usage metrics / linter feedback を consolidation に入れる設計。
足りないもの:
- Pirolli & Card の sensemaking stage における各 record の役割定義。
- Ticket / Objective / current question に紐づく task-bound shoebox。
- authority record へ戻れる evidence file / provenance / source anchor。
- hypothesis, alternative hypothesis, rejected reason, disconfirming evidence の first-class 表現。
- reviewer / orchestrator が confirmation bias を避けるための反証探索導線。
- resident exposure や read count ではなく product impact を測る metrics。
- stale / contradiction / renewal を作業中に resurfacing する導線。
したがって、次の Memory 設計は Codex / HermesAgent の単純なコピーではなく、以下を満たす必要がある。
```text
external data / sessions / tickets / docs / code
-> task-bound shoebox
-> evidence file with provenance
-> schema / representation
-> hypotheses and disconfirmation
-> Ticket / review / docs / implementation / decision product
-> product impact and stale-feedback metrics
```
この Objective では、以後の Memory 関連 Ticket / report / implementation をこの historical reference と sensemaking model の両方に照らして判断する。
-1
View File
@@ -1 +0,0 @@
default = "builtin:companion"
-22
View File
@@ -1,22 +0,0 @@
[backend]
provider = "builtin:yoi_local"
root = ".yoi/tickets"
[ticket]
language = "Japanese"
[roles.intake]
profile = "builtin:intake"
workflow = "ticket-intake-workflow"
[roles.orchestrator]
profile = "builtin:orchestrator"
workflow = "ticket-orchestrator-routing"
[roles.coder]
profile = "builtin:coder"
workflow = "multi-agent-workflow"
[roles.reviewer]
profile = "builtin:reviewer"
workflow = "multi-agent-workflow"
-81
View File
@@ -1,81 +0,0 @@
---
title: "半自動開発運用 Workflow"
state: "closed"
created_at: "2026-05-27T00:00:01Z"
updated_at: "2026-06-05T15:56:29Z"
---
## Migration reference
- legacy_ticket: tickets/auto-maintain-workflow.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# 半自動開発運用 Workflow
## 背景
insomnia では insomnia 自身の開発を、ユーザーがタスクを投げ、設計相談をし、実装 Pod / reviewer Pod に分担させる形で進めている。既に Workflow / Skills、SpawnPod、Pod 間通信、scope 委譲、ticket / review lifecycle は揃っており、局所的な実装判断は AI に移譲できる余地が大きい。
一方で、完全な unattended 自動開発にするには、永続ジョブキュー、git 書き込み権限、設計判断のエスカレーション基準など未整理の領域がある。初期段階では、常駐 scheduler ではなく、ユーザーが明示的に起動する「maintainer workflow」として、TODO / tickets を俯瞰し、実装・レビュー・修正依頼を orchestration し、設計境界や完了判断だけを人間に戻す運用を整備する。
## 要件
### Workflow の役割
`/auto-maintain` 相当の Workflow を用意し、親 Pod が以下を実行できるようにする。
- `TODO.md` と `tickets/` から着手候補を把握する
- 既存方針・既存 ticket から実装方針が十分に導ける作業を選ぶ
- 要件が曖昧、または設計判断が必要な場合は実装前に人間へ質問する
- 実装 Pod を spawn し、適切な read / write scope を委譲する
- 実装 Pod の完了報告と diff / build / test 結果を確認する
- 必要に応じて reviewer Pod、または親 Pod 自身でレビューする
- レビュー指摘があれば修正を依頼する
- 最終的に「完了候補」として人間に報告する
### エスカレーション基準
Workflow は、少なくとも以下の場合に作業を止めて人間へ確認する。
- ticket の要件から複数の設計方針が自然に導け、選択が将来の構造に影響する
- scope / permission / history 永続化 / prompt context 加工原則など、システムの安全モデルに触れる
- 新しい ticket の追加、既存 ticket の大幅な要件変更、ticket 完了削除を行う
- git の commit / merge / push など書き込み操作が必要になる
- テスト不能、再現不能、または作業範囲外の不具合に遭遇する
### Pod orchestration 規約
- 実装 Pod と reviewer Pod は原則分ける。ただし scope 衝突や作業粒度により、親 Pod がレビューしてもよい。
- 実装 Pod に worktree write scope を渡す場合、review artifact を親または reviewer が書く前に実装 Pod を停止して scope を回収する。
- spawn 時は、作業対象 worktree の write scope だけでなく、必要な参照元 ticket / project root の read scope も明示する。
- 子 Pod の出力は `ReadPodOutput` で確認し、必要なら `SendToPod` で追加依頼する。
- orphan 化した Pod や不要になった Pod は `StopPod` する。
### 成果物
- Workflow 本文、またはそれに準じる運用手順が workspace から呼び出せる形で追加される
- Workflow が resident workflow として広告可能かどうかを判断し、必要なら `model_invokation` 設定を含める
- 実際の insomnia 開発 ticket を 1 件以上試走し、実装 Pod / review / 人間確認の境界が機能することを確認する
- 試走で見つかった不足(永続ジョブキュー、scope handoff、review artifact の置き場所等)は、本チケット内で解決せず、必要なら別 ticket として切り出す
## 範囲外
- 常駐 scheduler / daemon による unattended 実行
- git commit / merge / push の自動化
- ticket 完了削除の自動化
- Workflow の状態機械化、永続ジョブキュー化、トランザクション管理
- scope owner handoff など、Pod 権限モデル自体の変更
## 完了条件
- `/auto-maintain` 相当の半自動開発運用 Workflow が利用可能になっている
- Workflow は TODO / tickets から作業を選び、実装 Pod / reviewer / 人間確認を使い分ける手順を明示している
- エスカレーション基準により、設計判断・git 書き込み・ticket 完了判断が人間に戻る
- 少なくとも 1 件の小さな実開発作業で試走し、結果と不足点が記録されている
- 既存の Workflow / Skill / memory の設計方針、特に Workflow 自動生成禁止と history に commit されない context input 禁止に反していない
## 参照
- `docs/plan/workflow.md`
- `docs/report/2026-05-05-file-ticket-scope.md`
- `tickets/internal-worker-workflow.md`
-25
View File
@@ -1,25 +0,0 @@
The old Auto Maintain workflow is retired and removed.
Resolution:
- Deleted `.yoi/workflow/auto-maintain.md`.
- Closed this Ticket as superseded by the newer Ticket-based orchestration workflow split:
- `ticket-intake-workflow`
- `ticket-orchestrator-routing`
- `ticket-preflight-workflow`
- `multi-agent-workflow`
- Updated `multi-agent-workflow` to point to Ticket Intake / Orchestrator Routing / Preflight instead of `$user/auto-maintain`.
- Updated `ticket-intake-workflow` to remove the obsolete auto-maintain connection.
- Updated `prompt-eval-metrics` so future prompt/workflow evaluation targets the current Ticket workflows or worktree workflow instead of `/auto-maintain`.
Rationale:
`auto-maintain` had become a broad and unstable WIP workflow with old assumptions around TODO/tickets and maintenance loops. Keeping it resident risks encouraging large implicit automation and bypassing the clearer gates now provided by Ticket Intake, Ticket Orchestrator Routing, Ticket Preflight, and Multi-agent Worktree Workflow.
Future maintainer/scheduler/lease behavior should be designed as explicit follow-up work, not revived through the deleted auto-maintain workflow.
Validation:
- `git diff --check`
- `./tickets.sh doctor`
- open workflow/docs search no longer finds `auto-maintain` references outside this closed historical Ticket context.
-40
View File
@@ -1,40 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:01Z -->
## Migrated
Migrated from tickets/auto-maintain-workflow.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-06-05T15:56:29Z status: closed -->
## Closed
The old Auto Maintain workflow is retired and removed.
Resolution:
- Deleted `.yoi/workflow/auto-maintain.md`.
- Closed this Ticket as superseded by the newer Ticket-based orchestration workflow split:
- `ticket-intake-workflow`
- `ticket-orchestrator-routing`
- `ticket-preflight-workflow`
- `multi-agent-workflow`
- Updated `multi-agent-workflow` to point to Ticket Intake / Orchestrator Routing / Preflight instead of `$user/auto-maintain`.
- Updated `ticket-intake-workflow` to remove the obsolete auto-maintain connection.
- Updated `prompt-eval-metrics` so future prompt/workflow evaluation targets the current Ticket workflows or worktree workflow instead of `/auto-maintain`.
Rationale:
`auto-maintain` had become a broad and unstable WIP workflow with old assumptions around TODO/tickets and maintenance loops. Keeping it resident risks encouraging large implicit automation and bypassing the clearer gates now provided by Ticket Intake, Ticket Orchestrator Routing, Ticket Preflight, and Multi-agent Worktree Workflow.
Future maintainer/scheduler/lease behavior should be designed as explicit follow-up work, not revived through the deleted auto-maintain workflow.
Validation:
- `git diff --check`
- `./tickets.sh doctor`
- open workflow/docs search no longer finds `auto-maintain` references outside this closed historical Ticket context.
---
@@ -1 +0,0 @@
{"id":"orch-plan-20260613-141646-1","ticket_id":"00001KSKBP9YG","kind":"accepted_plan","accepted_plan":{"summary":"E2E harness Ticket を inprogress 受理する。Playwright-like declarative API、independent opt-in crate、read-only structured TUI test events、PTY input、failure artifacts、Panel mouse selection / quit latency regression scenario を最小 vertical slice として実装する。root/original workspace では作業しない。","branch":"ticket-00001KSKBP9YG-e2e-harness","worktree":"/home/hare/Projects/yoi/.worktree/e2e-harness","role_plan":"Orchestrator が dedicated child worktree を作成し、Coder Pod に E2E harness / TUI observability / CLI test hook に必要な限定 write scope を渡す。Coder は first slice として declarative PTY Panel harness と mouse/quit regression scenarios を優先し、Reviewer は production contamination と read-only observability invariant を重点確認する。"},"author":"orchestrator","at":"2026-06-13T14:16:46Z"}
@@ -1,21 +0,0 @@
{
"version": 1,
"relations": [
{
"ticket_id": "00001KSKBP9YG",
"kind": "related",
"target": "00001KV0723PC",
"note": "Panel quit latency regression exposed need for measured PTY E2E, ready/barrier synchronization, and failure artifacts.",
"author": "orchestrator",
"at": "2026-06-13T13:56:37Z"
},
{
"ticket_id": "00001KSKBP9YG",
"kind": "related",
"target": "00001KV072V89",
"note": "Panel mouse selection regression exposed need for TUI/Panel PTY E2E with structured UI feedback and mouse input assertions.",
"author": "orchestrator",
"at": "2026-06-13T13:56:37Z"
}
]
}
@@ -1,27 +0,0 @@
Approve.
Delta reviewed:
- Re-reviewed the fix commit `b30b43b9 test: cfg-gate e2e observer payloads` after the earlier request-changes review.
- Inspected the updated observer module boundary and call sites in `crates/tui/src/lib.rs` and `crates/tui/src/multi_pod.rs`, plus the unchanged harness/tests in `tests/e2e`.
Evidence:
- `e2e_observer` is now only compiled from `crates/tui/src/lib.rs` under `#[cfg(feature = "e2e-test")]`; the previous normal-build no-op facade was removed.
- Observer payload construction is gated at call sites with `#[cfg(feature = "e2e-test")]`, including `panel_ready`, `selection_changed`, `action_requested`, `quit_requested`, and `emit_rows_rendered` calls.
- Panel E2E DTOs/helpers (`PanelE2eRowKey`, `PanelE2eRect`, `PanelE2eRenderedRow`, `PanelE2eRowsRendered`, `App::emit_rows_rendered`) are now behind `#[cfg(feature = "e2e-test")]`, so the normal panel render path no longer builds row snapshots or retains that runtime helper path.
- The background-task hold seam is still feature-gated: `check_background_task_hold` and `release_background_task_hold` calls are under `#[cfg(feature = "e2e-test")]`, and `YOI_TUI_TEST_HOLD_BACKGROUND_TASK` behavior lives in the gated observer module.
- Mouse capture tracking remains intact in the harness: it tracks `?1000h` and `?1006h`, `click(...)` requires both capture modes before injecting PTY bytes, the test waits for rendered rows, asserts `selection_changed`, and asserts no `action_requested` dispatch.
- Quit-latency coverage remains intact: the test waits for `panel_ready`, then verifies an actual pending `reload` background-task barrier before sending Ctrl+C through the PTY and asserting bounded exit.
- The production/non-production boundary now satisfies the Ticket intent: the harness remains opt-in, observability is read-only and feature-gated, and no UI input/action path is bypassed.
Validation run in `/home/hare/Projects/yoi/.worktree/e2e-harness`:
- `git diff --check 134e8b8b..HEAD` — passed.
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed; 2 tests passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
No source changes were made during re-review.
@@ -1,25 +0,0 @@
Request changes.
Evidence reviewed:
- Inspected Ticket record and `git diff 134e8b8b..HEAD` for commits `96561897` and `10a1c383`.
- `tests/e2e` provides a credible first declarative harness (`PanelHarness::spawn`, `wait_for`, `wait_for_rows`, `click`, `press`, `expect_selection`, `expect_exit_within`, artifacts/metadata/input/output/event logs). This is not merely a fixed-sleep shell script.
- Mouse-selection scenario waits for rendered rows, verifies both normal mouse and SGR mouse capture before `click`, sends the click through PTY bytes, waits for `selection_changed`, and asserts no `action_requested` dispatch.
- Quit-latency scenario creates a real feature-gated background-task hold barrier, waits until the task is actually waiting before sending Ctrl+C through the PTY, and measures bounded exit latency.
- `yoi-e2e` is opt-in via package feature/test `required-features = ["e2e"]`; e2e tests are outside default members. `YOI_TUI_TEST_EVENTS` and `YOI_TUI_TEST_HOLD_BACKGROUND_TASK` env behavior is behind `tui/e2e-test` / `yoi/e2e-test` feature gates, and the hook is observability-only.
Required change:
- The normal production build still contains/evaluates too much e2e harness glue. In non-`e2e-test` builds, `crates/tui/src/e2e_observer.rs` exposes no-op `emit`/hold functions, but call sites still execute test-specific data construction. In particular `App::emit_rows_rendered` and its panel row key/rect DTOs are compiled unconditionally and `app.emit_rows_rendered()` is called from the panel render path, causing row snapshots to be built every draw even though emission is a no-op. Selection/action/quit call sites also construct `serde_json::json!` payloads before the no-op facade. This violates the recorded boundary that production binaries should not contain harness logic and production-side hooks must be feature-gated/compiled out for normal builds.
- Please cfg-gate the call sites/helpers/DTOs, or use a lazy cfg-gated macro/helper so normal builds do not evaluate or retain e2e event payload construction. A tiny compile-only facade is acceptable only if it does not execute or allocate e2e-specific work and does not keep harness DTO logic in the normal runtime path.
Validation run in `/home/hare/Projects/yoi/.worktree/e2e-harness`:
- `git diff --check 134e8b8b..HEAD` — passed.
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
No source changes were made during review.
-100
View File
@@ -1,100 +0,0 @@
---
title: "E2E テストハーネス"
state: 'closed'
created_at: "2026-05-27T00:00:02Z"
updated_at: '2026-06-13T16:34:06Z'
queued_by: 'yoi ticket'
queued_at: '2026-06-13T14:17:34Z'
---
## Migration reference
- legacy_ticket: tickets/e2e-harness.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# E2E テストハーネス
## 背景
`CLAUDE.md:6` で明記している通り、現状「実プロセスをスポーンさせての E2E」は未設計である。crate 内 integration test は 121 ファイル / 969 ケースまで揃っているが、以下の領域は in-process では再現できず、複数チケットの完了条件が宙に浮いている。
- `pod-cli-manifest-flags`: `--manifest` / `INSOMNIA_USER_MANIFEST` / 併用 conflict など実 CLI 挙動
- `pod-persistent-state`: Pod プロセス**再起動後**の active session 復元、spawner 再起動後の `ListPods` 復元
- `pod-session-fork`: `pod_cli` から fork → 新 session で run まで通せる
- `pod-parent-turn-callback`: 実子 Pod を spawn した状態の親 history 反映
- `pod-empty-turn-rollback`: 「TUI / pod_cli いずれの経路でも」明記
- `permission-extension-point.review.md:21`: `[permissions]` を含む Pod 構築 → tool deny までの結合検証
- `llm-worker-stream-continuation`: SSE 途中切断 + 継続/中断と課金重複が無いことの確認
- `native-gui-mvp`: GUI から `pod` subprocess を起動 → socket 接続 → graceful shutdown
`crates/pod/tests/spawn_pod_test.rs` のように subprocess を `/bin/true` ですり替える擬似手法は既にあるが、これは「子 Pod が即終了する状況下での registry 書き込み」を見るためのもので、実 pod を立ち上げての protocol 往復はしていない。
## 方針
- ワークスペース直下 **`tests/e2e/`** に E2E 専用の crate を切る。E2E は単一の crate / バイナリの責務ではないため、既存 `crates/<x>/tests/` には置かない。
- 実 `pod` バイナリは `env!("CARGO_BIN_EXE_pod")` で取得。ファイルシステムは tmpdir に閉じ、`INSOMNIA_RUNTIME_DIR` / data dir / `INSOMNIA_USER_MANIFEST` 等を env で完全 sandbox 化する。
- protocol を喋る側は **`tickets/client-crate.md` で切り出す `client` crate** を直接利用する。TUI バイナリを PTY で叩く方針は採らない(GUI MVP との整合と E2E 安定性の観点から)。
- CI 既定実行から外す。`--features e2e` か独立ジョブで opt-in。ローカルでは `cargo test -p e2e --features e2e` 相当で叩ける形にする。
## 詰めたい論点(実装前に決める)
### 1. LLM provider のスタブ手段が fixture HTTP 再生だけで充足するか
既存 `crates/llm-worker/tests/anthropic_fixtures.rs` 等は in-process loader として書かれており、HTTP サーバーとして再生する形にはなっていない。E2E では Pod プロセスが env で渡された URL に対して実 HTTP を叩く以上、**最低限「fixture を返す HTTP サーバー」** は必要。
ただし、それだけで充足するかは不明:
- **動的応答が要るシナリオ**: SSE を途中で能動的に切る (`llm-worker-stream-continuation`)、tool 呼び出しの結果に応じて分岐する応答、複数ターンに渡る会話の途中で挙動を変える、など。録画再生だけでは作りにくい。
- **provider 差**: Anthropic / OpenAI Responses / Gemini / Ollama / Codex OAuth で endpoint / 認証 / スキーマが違う。E2E で全 provider を回す必要は無いが、最低 1〜2 provider はハーネスを持たせるべきで、選定が要る。
- **OAuth 系**: Codex OAuth はトークン取得経路自体が外部依存。E2E では事前注入された token を読む形に倒すか、OAuth flow ごと canned server で模すか。
このチケットでは「fixture HTTP 再生」を出発点としつつ、**動的応答のための最小 canned server インターフェース**(テストケース側からハンドラを差し替えられる形)も同時に検討範囲に含める。両方が無いと上のシナリオが書けない。
### 2. provider URL の差し替え経路
各 provider の base URL を env で上書きできる前提が、現コードに揃っているか確認・整備する必要がある。揃っていなければ別チケットに切り出すか、本チケット内で minimal に対応するか決める。
### 3. fixture 形式
既存の in-process fixture (`tests/*_fixtures.rs`) と HTTP 再生用 fixture を同じソースから作るか、別管理にするか。共通化できるなら record/replay 経路を整備する。
### 4. 並列実行と env 干渉
`spawn_pod_test.rs` は env mutex で直列化している。E2E でも env (`INSOMNIA_*`)・runtime dir・socket path に依存する以上、テスト並列度の方針を決める(`--test-threads=1`、test-per-process、または env を引数にハンドオフして mutex 不要にする)。
### 5. 失敗時の診断
実プロセスが絡むためスタックトレースだけでは原因特定しにくい。pod の stderr / stdout、session log、runtime dir の中身をテスト失敗時に dump する仕組みを最初に入れておく。
## 要件
- `tests/e2e/` 以下に E2E 用 crate(仮称 `e2e`)が存在し、`Cargo.toml` の `[features] e2e = []` で gate されている。
- `cargo test -p e2e --features e2e` で実 `pod` バイナリを spawn し、protocol 経由で 1 シナリオ(最小: spawn → 1 turn 実行 → graceful shutdown)が通る。
- LLM provider のスタブが少なくとも 1 provider 分動き、上の最小シナリオが本物の HTTP 越しに完結する。
- env / tmpdir / socket path が tmpdir 内に閉じ、テスト間の干渉が無い。
- テスト失敗時に pod プロセスの stderr / 関連ファイルが artefact として確認できる。
- CI 既定パス (`cargo test --workspace`) では E2E が走らない。opt-in jobs でだけ走る。
- 上の論点 1〜5 が文書化されている(チケット内 or `docs/` 配下のいずれか)。
## 完了条件
- 上記要件を満たすハーネスが入り、最小シナリオ 1 本が通る。
- 後続シナリオ(permission deny / cli-manifest-flags / spawn 親子 / resume / fork / stream-continuation)を**書く側の手順書**が提示されている(fixture 追加方法、シナリオ crate の追加方法、env のお作法)。
- 個別シナリオの実装は本チケットに含めない。後続チケットで切る。
## 範囲外
- 個別 E2E シナリオの実装(permission deny / cli flags / spawn / resume / fork / stream-continuation)。それぞれ後続チケット。
- 全 provider 分の HTTP スタブ(最初は 1 provider に絞る)。
- TUI バイナリを PTY で操作する経路。
- GUI バイナリの E2E(`tickets/native-gui-mvp.md` 完了後に別途)。
- E2E を CI 既定で走らせる切替。
## 依存 / 関連
- `tickets/client-crate.md`(protocol を喋る client crate を切り出す。E2E はここに依存して書く)
- `tickets/llm-worker-stream-continuation.md`(動的応答 canned server を必要とする最初のシナリオ)
- `tickets/permission-extension-point.review.md`(最初に書きたいシナリオ)
- `crates/pod/tests/spawn_pod_test.rs`(env mutex 等の流儀を流用)
- `crates/llm-worker/tests/*_fixtures.rs`(fixture 資産の出発点)
- `CLAUDE.md:6`(E2E 未設計の宣言)
-1
View File
@@ -1 +0,0 @@
Closed after prior done-state completion.
-550
View File
@@ -1,550 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:02Z -->
## Migrated
Migrated from tickets/e2e-harness.md. No legacy review file was present at migration time.
---
<!-- event: decision author: orchestrator at: 2026-06-13T13:56:37Z -->
## Decision
E2E scope refinement: TUI/Panel PTY 自動化もこの Ticket の範囲に含める。
背景:
- Panel mouse selection / Panel Quit latency の直近不具合では、focused unit test と code-path review だけで `done` 判定し、実端末経路の positive validation / measured validation が不足していた。
- 既存本文の「TUI バイナリを PTY で叩く方針は採らない」は、blind な固定入力スクリプトや GUI 代替としての ad hoc 操作を避ける意図として扱い、TUI/Panel の実プロセス・実端末入力を検証する automated PTY harness は本 Ticket に含める。
- Pod protocol/subprocess E2E と TUI/Panel PTY E2E は harness の部品は違うが、どちらも「実プロセスを spawn して user-visible boundary を検証する」ため、別 umbrella に分けず、この E2E harness Ticket の phase として扱う。
方針:
- 固定 sleep + 固定 input だけの PTY script は採用しない。Harness は UI からの structured feedback を待ってから入力を送る。
- TUI/Panel には test-only / opt-in の observability route を追加する。これは UI action を bypass する command channel ではなく、状態観測・同期・失敗診断のための read-only probe とする。
- 実際の keyboard / mouse / Ctrl+C 入力は PTY 経由で送る。Probe は `first_draw`、`panel_snapshot_ready`、`rows_rendered`、`selection_changed`、`actionbar_changed`、`background_task_started/finished/aborted`、`quit_requested`、`terminal_cleanup_started/finished`、`exit` などの structured event を JSONL 等で吐く。
- Mouse E2E は `rows_rendered` の row key と screen rect を待ち、SGR mouse sequence を PTY に送って、`selection_changed` と screen/actionbar/detail の変化を確認する。
- Quit latency E2E は `panel_ready` / background work pending などの barrier event を待ってから `Ctrl+C` / `Ctrl+D` を送り、`quit_requested -> exit` の elapsed を測る。非本質 background work が abort/drop され、terminal cleanup が行われることも event で確認する。
- Screen output は `vt100`/`vte` 等の terminal parser で secondary oracle / artifact として保存する。主要同期は structured event に寄せる。
- Test probe は `--tui-test-events <path>` 等の明示的な hidden/dev/test flag か `e2e` feature 配下の構成で有効化し、通常実行・model context・Ticket authority・Pod protocol には影響させない。
- Failure artifact として event JSONL、input log、screen dump、stdout/stderr、runtime/data/workspace tmpdir の relevant tree、timing summary を保存する。
受け入れ条件の追加案:
- `cargo test -p e2e --features e2e`(または同等の opt-in command)で実 `yoi panel` を PTY 上で起動し、structured probe feedback を待ってから入力する harness が動く。
- Panel row click E2E: rendered row rect を使って SGR mouse click を送り、selected row が変わることを assertion する。
- Panel quit latency E2E: ready/pending background work barrier 後に Quit 入力を送り、exit latency が閾値内で、nonessential background work が quit を block しないことを assertion する。
- Fixed sleep だけに依存する test は不可。ready/barrier event が来なければ screen dump と event log を artifact として失敗する。
- Probe は read-only observability であり、input/action path を bypass しないことを reviewer が確認する。
---
<!-- event: decision author: orchestrator at: 2026-06-13T14:03:56Z -->
## Decision
E2E design decision: Playwright-like declarative test API と production binary 非混入を前提にする。
Decision:
- E2E は ad hoc shell / fixed sleep script ではなく、Rust の独立 crate から宣言的に scenario を書ける構造にする。
- 例: `PanelHarness::spawn(...)`、`panel.wait_for(PanelReady)`、`panel.click(row("ticket", id))`、`panel.expect_selection(...)`、`panel.press(CtrlC)`、`panel.expect_exit_within(...)` のように、Playwright 的な wait/action/assertion API を提供する。
- Harness crate は production binary / normal library API から独立させる。想定配置は `tests/e2e/` または `crates/e2e_harness` + integration tests で、通常 build / release package / normal `yoi` binary に test harness logic を混ぜない。
- 本番 binary に混ぜる必要があるものは、原則として「既存 TUI state から read-only diagnostic event を emit するための最小 test hook」に限定する。その hook も normal runtime では無効で、明示 feature / hidden dev flag / cfg(test/e2e) 等でしか有効化しない。
- E2E harness は production code の内部関数を直接呼んで state mutation しない。入力は PTY、観測は structured test events / terminal screen parser、assertion は harness 側で行う。
- Structured events は protocol authority ではなく test observability artifact として扱う。Ticket/Pod authority や user-visible semantics を変えない。
Rationale:
- 今回の Panel mouse / Quit latency の失敗は、unit/focused tests と code-path review だけでは user-visible terminal behavior を保証できないことを示した。
- 一方で fixed sleep + input script は再現性・診断性が低く、ready 状態や background work barrier を確認できない。
- Playwright-like API なら、test は「何を待ち、何を入力し、何を観測するか」を宣言的に表現でき、失敗時に event log / screen dump / timing artifact を残せる。
- Production binary への混入を避けることで、release behavior / binary size / authority surface / model-visible surfaces を汚さない。
Acceptance refinement:
- E2E test author が fixed sleep ではなく `wait_for` / `expect` / `within` を使って Panel/TUI scenario を書ける。
- Mouse selection と Quit latency の regression は、この declarative harness API 上の scenario として表現される。
- Test-only observability route は opt-in であり、release/normal execution では無効または到達不能であることを reviewer が確認する。
- Failure artifact に scenario step、last observed events、screen snapshot、timing、binary path、workspace/runtime dirs が含まれる。
---
<!-- event: decision author: orchestrator at: 2026-06-13T14:16:24Z -->
## Decision
Routing decision: implementation_ready
Reason:
- ユーザーが E2E harness を 1 Ticket として扱い、Playwright-like declarative API、structured feedback、production binary 非混入を前提に進めることを明示した。
- Ticket body は旧名/旧構成を含むが、thread decisions により現在の binding direction は明確化済み: Pod subprocess/protocol E2E と TUI/Panel PTY E2E を同じ harness Ticket の phase として扱う。
- 直近の Panel mouse selection / Panel Quit latency の regression から、実プロセス・実 PTY・structured event feedback・failure artifact を最小スライスに含める必要がある。
- `TicketRelationQuery` では durable blocker はなく、関連 Ticket は context link のみ。
- Orchestrator worktree は clean。implementation side effect は state acceptance 後に dedicated child worktree で行う。
Evidence checked:
- Ticket body / thread decisions。
- relation records: `00001KV072V89` / `00001KV0723PC` への related links。
- orchestration plan records: なし。
- current workspace state: Orchestrator worktree clean、queued/inprogress work なし、implementation child Pods なし。
- project context: AGENTS guidance の E2E 未設計、prompt/resource boundary、production binary contamination 回避方針、直近 Panel validation failure records。
IntentPacket:
Intent:
- Yoi の E2E testing foundation を、実プロセス spawn と TUI/Panel PTY automation の両方を扱える opt-in harness として導入する。
- 最初の vertical slice は、Playwright-like declarative API、structured UI feedback、failure artifact、Panel mouse selection / Panel quit latency の regression scenario を実装できる形にする。
Binding decisions / invariants:
- E2E harness は independent crate / test surface とし、normal release / normal `yoi` binary に harness logic を混ぜない。
- 本番 binary 側に必要な変更は opt-in read-only observability hook に限定する。UI action/state mutation を test hook で bypass しない。
- 実入力は PTY 経由で送る。structured event は synchronization / assertion / artifact のための観測情報であり、authority channel ではない。
- fixed sleep + fixed input だけの blind script を acceptance にしない。
- Pod/Ticket authority、prompt/resource boundary、public runtime behavior を E2E 都合で歪めない。
Requirements / acceptance criteria:
- E2E author が Rust code で `spawn` / `wait_for` / `click` / `press` / `expect_*` / `within` を使って scenario を宣言的に書ける。
- Opt-in command(例: `cargo test -p e2e --features e2e` または同等)で通常 CI 既定から分離される。
- TUI/Panel test は panel ready / rows rendered / selection changed / background task / quit events など structured feedback を待ってから PTY input を送る。
- Panel mouse selection regression と Panel quit latency regression の少なくとも skeleton または minimal passing scenario が declarative harness 上で表現される。
- Failure artifact として event log、input log、screen dump、timing、binary path、workspace/runtime dirs が残る。
- Production binary contamination がないこと、または opt-in hook が normal runtime で無効/到達不能であることを reviewer が確認できる。
Implementation latitude:
- `tests/e2e/` crate か `crates/e2e_harness` + integration tests のどちらに置くかは Coder が codebase constraints を見て選んでよい。ただし normal build/release contamination は避ける。
- PTY crate、terminal parser、event JSONL format、fixture workspace builder の具体設計は Coder が選んでよい。
- 最初の slice は full provider E2E ではなく、Panel/TUI harness と minimal process lifecycle / artifact foundation を優先してよい。
- 既存旧名 `INSOMNIA_*` / `pod` references は現在の `yoi` / config surface に合わせて整理してよい。
Escalate if:
- read-only observability hook では足りず、production UI action path を test-only command channel で直接操作したくなる場合。
- normal release binary / normal CLI surface に test-only options を露出させる必要がある場合。
- workspace structure、Cargo package layout、Nix/package source filter に大きな変更が必要になる場合。
- Provider stub / Pod protocol E2E まで同時に広げないと Panel slice が進められない場合。
Validation:
- focused E2E harness tests / example scenarios。
- `cargo fmt --check`。
- `git diff --check`。
- 変更範囲に応じて `cargo check --workspace --all-targets` または narrower package checks。
- 新 E2E command が opt-in で実行可能であることを report する。
Current code map:
- `crates/yoi` / CLI launch path: hidden/test-only flag injection の候補。
- `crates/tui/src/multi_pod.rs`: Panel events / observable state emission の候補。
- `tests/e2e/` or new harness crate: declarative scenario API / PTY runner / artifact collector。
- root `Cargo.toml` / package metadata: opt-in package registration と release contamination check。
Critical risks / reviewer focus:
- Harness code が production binary に混ざっていないこと。
- Observability hook が read-only で、input/action path を bypass していないこと。
- Test が fixed sleep 依存ではなく structured feedback / timeouts / artifacts を持つこと。
- Panel mouse / quit latency regression が今後「unit test だけで done」にならない程度の user-visible path を cover すること。
---
<!-- event: intake_summary author: orchestrator at: 2026-06-13T14:16:54Z -->
## Intake summary
ユーザー確認により、既存 E2E harness Ticket は Pod subprocess E2E と TUI/Panel PTY E2E を一つの実装対象として扱う。Playwright-like declarative API、independent opt-in crate、production binary 非混入、read-only structured observability、PTY input、failure artifact、Panel mouse / quit latency regression scenario が受け入れ方向として明確化済み。
---
<!-- event: state_changed author: orchestrator at: 2026-06-13T14:16:54Z from: planning to: ready reason: user_authorized_e2e_harness_implementation field: state -->
## State changed
Ticket planning が完了しました。state planning -> ready。
---
<!-- event: state_changed author: "yoi ticket" at: 2026-06-13T14:17:34Z from: ready to: queued reason: queued field: state -->
## State changed
Ticket を `yoi ticket` が queued にしました。
---
<!-- event: state_changed author: orchestrator at: 2026-06-13T14:17:40Z from: queued to: inprogress reason: orchestrator_acceptance_after_user_authorization field: state -->
## State changed
ユーザーが明示的に inprogress 化して進めることを承認した。Ticket evidence / relation records / OrchestrationPlan accepted plan / Orchestrator worktree clean state を確認済みで、blocking relation はない。Implementation side effect の前に state を inprogress として記録する。
---
<!-- event: implementation_report author: orchestrator at: 2026-06-13T14:18:55Z -->
## Implementation report
Implementation handoff started.
- Worktree: `/home/hare/Projects/yoi/.worktree/e2e-harness`
- Branch: `ticket-00001KSKBP9YG-e2e-harness`
- Coder Pod: `coder-00001KSKBP9YG-e2e`
- Scope: child worktree read、root `Cargo.toml` / `Cargo.lock` write、`tests/e2e` write、selected crates (`crates/tui`, `crates/yoi`, `crates/pod`, `crates/protocol`) write、`target` write、this Ticket record write。`.yoi/memory` や local/runtime/log/lock/secret-like `.yoi` paths は write scope に含めていない。
- Note: runtime launch validation のため `/home/hare/Projects/yoi` に非再帰 read grant を付けたが、Coder には root/original workspace を inspect/write/git/validate/merge/cleanup しないよう明示済み。
Next:
- Coder は Playwright-like declarative E2E harness、read-only structured observability、PTY input、Panel mouse / quit latency regression scenario の first slice を実装する。
- Coder の commit / implementation_report / validation evidence を確認後、Reviewer を read-only 基本で起動する。
---
<!-- event: decision author: orchestrator at: 2026-06-13T14:31:31Z -->
## Decision
Design note: Panel mouse E2E は raw SGR sequence を固定送信するだけでは不十分。
Rationale:
- Harness が PTY に直接 `ESC [ < ... M` を書くと、実端末が mouse capture 有効時だけ mouse sequence を生成するという条件を bypass してしまい、今回のような「実端末ではイベントが来ない」系の不具合を見逃す可能性がある。
- Mouse E2E は locator/row rect を使って coordinate を決めるだけでなく、TUI が mouse capture mode を有効化したことも検証する必要がある。
追加すべき test harness 要件:
- virtual terminal / screen parser は app output の terminal mode sequence(例: normal mouse + SGR mouse mode, `?1000h` / `?1006h` 相当)を tracking し、click helper は capture enabled が観測されていない場合に fail する。
- もしくは explicit read-only structured event と terminal output assertion の両方で `mouse_capture_enabled` を確認する。
- `click(row_selector)` は `rows_rendered` の rect から座標を選ぶが、raw SGR injection だけで成功扱いにしない。
- assertion は `selection_changed` event、screen/actionbar/detail の secondary oracle、そして workflow action が発火していないことを組み合わせる。
- これにより mouse selection E2E は面倒になるが、capture setup / coordinate mapping / event handling の user-visible path を分離して検証できる。
---
<!-- event: decision author: orchestrator at: 2026-06-13T14:40:42Z -->
## Decision
Coder first-slice review: changes requested before external review.
The initial E2E harness direction is promising, but it does not yet satisfy the regression-prevention bar from this Ticket.
Required changes sent to Coder:
1. Mouse E2E must not pass solely by injecting raw SGR mouse bytes. Harness must track terminal mouse capture enable output (`?1000h` / `?1006h` equivalent) and fail `click(...)` / expose `expect_mouse_capture_enabled()` when capture was not observed.
2. Production binary contamination must be reduced. The TUI JSONL observer currently appears to be available in normal builds via `YOI_TUI_TEST_EVENTS`; prefer explicit `e2e-test` feature/cfg gating so release/normal binary has the hook compiled out. Report if feature gating is too large.
3. Quit latency E2E must wait for a real pending/background-work barrier at the moment of quit, not merely assert that `background_task_started` happened sometime earlier. Strengthen the scenario to prove Ctrl+C while pending work exists exits promptly.
4. Update implementation_report and validation evidence after changes.
Reason:
- The mouse selection regression specifically needs to catch missing terminal mouse capture, which raw SGR injection can bypass.
- The user explicitly requested a structure where E2E harness logic does not mix into the production binary.
- The quit latency regression needs measured user-visible behavior under a synchronized pending-work condition, not a loose startup smoke test.
---
<!-- event: implementation_report author: hare at: 2026-06-13T14:38:03Z -->
## Implementation report
Implemented an opt-in E2E testing foundation for real `yoi panel` process automation.
API / harness shape:
- Added workspace package `tests/e2e` (`yoi-e2e`) with required feature `e2e`, so scenarios are opt-in.
- Added `PanelHarness::spawn(...)`, `wait_for(...)`, `wait_for_rows(...)`, `click(...)`, `press(...)`, `expect_selection(...)`, `expect_exit_within(...)`, and `artifacts()`.
- Harness drives the real `yoi panel` binary through a Unix PTY and sends SGR mouse / keyboard bytes through that PTY only.
- Harness captures artifacts under a per-run artifact directory: `events.jsonl`, `input.log`, `pty-output.log`, and `run.json`.
Production / non-production boundary:
- Harness logic stays in `tests/e2e` and is not mixed into production crates.
- Production-side change is limited to an opt-in read-only TUI JSONL observer enabled only by `YOI_TUI_TEST_EVENTS`.
- Observer records Panel/TUI synchronization and assertion events (`panel_ready`, `rows_rendered`, `selection_changed`, `mouse_click`, `action_requested`, `quit_requested`, background task lifecycle, terminal cleanup, exit).
- The observer does not mutate UI state, inject input, bypass actions, or grant authority; real input remains PTY-only.
Scenarios added:
- Panel mouse selection regression: waits for rendered rows, sends an SGR mouse click through PTY, asserts selection changed, and asserts no panel action was dispatched.
- Panel quit latency regression: waits for Panel ready plus background-task barrier, sends Ctrl+C through PTY, asserts clean exit within the threshold, and verifies the quit event.
Files changed:
- `Cargo.toml`, `Cargo.lock`
- `crates/tui/src/lib.rs`
- `crates/tui/src/multi_pod.rs`
- `crates/tui/src/e2e_observer.rs`
- `tests/e2e/Cargo.toml`
- `tests/e2e/src/lib.rs`
- `tests/e2e/tests/panel.rs`
Validation:
- `cargo build -p yoi` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests).
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
- `git diff --check` — passed.
Remaining gaps / risks:
- The first slice is Unix PTY-based; cross-platform PTY support is not implemented.
- The screen artifact is currently raw PTY output rather than a parsed terminal snapshot.
- Fixture setup blocks Companion/Orchestrator role auto-spawn by placing intentionally invalid isolated test pod metadata in the fixture data dir; this avoids leaking live background Pods but should be replaced by a cleaner fixture strategy if the Panel gains an explicit test fixture mode.
---
<!-- event: implementation_report author: hare at: 2026-06-13T15:00:29Z -->
## Implementation report
Follow-up implementation update for review-required changes:
Mouse E2E false-positive prevention:
- `PanelHarness` now tracks the PTY output for terminal mouse mode enable/disable escape sequences.
- It requires both normal mouse tracking (`ESC[?1000h`, with disable `ESC[?1000l`) and SGR mouse mode (`ESC[?1006h`, with disable `ESC[?1006l`) to have been observed as currently enabled.
- Added `PanelHarness::expect_mouse_capture_enabled()` and the Panel mouse E2E calls it before clicking.
- `PanelHarness::click(...)` also fails with `MouseCaptureNotEnabled` if mouse capture has not been observed, so raw SGR mouse injection alone cannot make the test pass.
Production binary contamination reduction:
- Added explicit feature gates:
- `tui/e2e-test`
- `yoi/e2e-test = ["tui/e2e-test"]`
- The `YOI_TUI_TEST_EVENTS` JSONL event path and the background-task hold seam are compiled only under `tui/e2e-test`.
- Normal builds still type-check a no-op facade so call sites stay simple, but env-var observability/hold behavior is compiled out unless the feature is enabled.
- E2E binary build command is now: `cargo build -p yoi --features e2e-test`.
Quit latency barrier strengthening:
- Added a feature-gated test-only seam `YOI_TUI_TEST_HOLD_BACKGROUND_TASK=reload` that holds the Panel reload task pending in the E2E binary until quit aborts it.
- Added `PanelHarness::expect_background_task_pending("reload")`, which verifies that a `background_task_started` event exists and no matching `background_task_finished` or `background_task_aborted` event has superseded it.
- The quit latency test now uses the hold seam and asserts pending reload work immediately before sending Ctrl+C through the PTY.
Harness/artifact adjustment:
- E2E fixture artifacts now persist under workspace `target/e2e-artifacts/...` instead of package-local temporary dirs, so failure artifacts remain inspectable.
Validation after update:
- `cargo fmt --check` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests).
- `git diff --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
Remaining gaps / risks:
- The E2E harness remains Unix PTY based.
- The screen artifact remains raw PTY output, not a parsed terminal snapshot.
- The test-only pending-task hold intentionally changes timing only for the `e2e-test` binary; it is not compiled into normal builds.
---
<!-- event: review author: hare at: 2026-06-13T15:05:52Z status: request_changes -->
## Review: request changes
Request changes.
Evidence reviewed:
- Inspected Ticket record and `git diff 134e8b8b..HEAD` for commits `96561897` and `10a1c383`.
- `tests/e2e` provides a credible first declarative harness (`PanelHarness::spawn`, `wait_for`, `wait_for_rows`, `click`, `press`, `expect_selection`, `expect_exit_within`, artifacts/metadata/input/output/event logs). This is not merely a fixed-sleep shell script.
- Mouse-selection scenario waits for rendered rows, verifies both normal mouse and SGR mouse capture before `click`, sends the click through PTY bytes, waits for `selection_changed`, and asserts no `action_requested` dispatch.
- Quit-latency scenario creates a real feature-gated background-task hold barrier, waits until the task is actually waiting before sending Ctrl+C through the PTY, and measures bounded exit latency.
- `yoi-e2e` is opt-in via package feature/test `required-features = ["e2e"]`; e2e tests are outside default members. `YOI_TUI_TEST_EVENTS` and `YOI_TUI_TEST_HOLD_BACKGROUND_TASK` env behavior is behind `tui/e2e-test` / `yoi/e2e-test` feature gates, and the hook is observability-only.
Required change:
- The normal production build still contains/evaluates too much e2e harness glue. In non-`e2e-test` builds, `crates/tui/src/e2e_observer.rs` exposes no-op `emit`/hold functions, but call sites still execute test-specific data construction. In particular `App::emit_rows_rendered` and its panel row key/rect DTOs are compiled unconditionally and `app.emit_rows_rendered()` is called from the panel render path, causing row snapshots to be built every draw even though emission is a no-op. Selection/action/quit call sites also construct `serde_json::json!` payloads before the no-op facade. This violates the recorded boundary that production binaries should not contain harness logic and production-side hooks must be feature-gated/compiled out for normal builds.
- Please cfg-gate the call sites/helpers/DTOs, or use a lazy cfg-gated macro/helper so normal builds do not evaluate or retain e2e event payload construction. A tiny compile-only facade is acceptable only if it does not execute or allocate e2e-specific work and does not keep harness DTO logic in the normal runtime path.
Validation run in `/home/hare/Projects/yoi/.worktree/e2e-harness`:
- `git diff --check 134e8b8b..HEAD` — passed.
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
No source changes were made during review.
---
<!-- event: implementation_report author: hare at: 2026-06-13T15:18:21Z -->
## Implementation report
Follow-up implementation update for reviewer request `559adb9a ticket: request e2e harness changes`:
Production/non-production boundary fix:
- Removed the normal-build no-op `e2e_observer` module path and now compile the observer module only behind `tui/e2e-test` via `#[cfg(feature = "e2e-test")] mod e2e_observer;`.
- Added `#[cfg(feature = "e2e-test")]` to all Panel/TUI observability call sites that build JSON payloads, including terminal cleanup/exit, panel ready, rows-rendered, mouse click, selection changes, action requests, quit request, and background task lifecycle events.
- `App::emit_rows_rendered`, `PanelE2eRowKey`, `PanelE2eRect`, `PanelE2eRenderedRow`, `PanelE2eRowsRendered`, and the conversion helpers are now compiled only with `tui/e2e-test`.
- Normal builds no longer call `app.emit_rows_rendered()`, no longer evaluate `serde_json::json!` e2e payloads, and no longer retain the Panel E2E DTO/helper logic in the runtime path.
- The background reload hold seam remains compiled/called only under `tui/e2e-test`; `YOI_TUI_TEST_EVENTS` and `YOI_TUI_TEST_HOLD_BACKGROUND_TASK` behavior remains feature-gated.
Preserved E2E behavior:
- Mouse E2E still verifies PTY output for normal mouse tracking + SGR mouse enable sequences before any raw SGR click can be sent.
- `PanelHarness::click(...)` still fails if mouse capture was not observed.
- Quit latency E2E still uses the feature-gated pending reload hold barrier and asserts the reload task is pending before Ctrl+C.
Validation:
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests).
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
- `git diff --check` — passed.
Remaining gaps / risks unchanged:
- The E2E harness remains Unix PTY based.
- The screen artifact remains raw PTY output rather than a parsed terminal snapshot.
---
<!-- event: review author: hare at: 2026-06-13T15:21:30Z status: approve -->
## Review: approve
Approve.
Delta reviewed:
- Re-reviewed the fix commit `b30b43b9 test: cfg-gate e2e observer payloads` after the earlier request-changes review.
- Inspected the updated observer module boundary and call sites in `crates/tui/src/lib.rs` and `crates/tui/src/multi_pod.rs`, plus the unchanged harness/tests in `tests/e2e`.
Evidence:
- `e2e_observer` is now only compiled from `crates/tui/src/lib.rs` under `#[cfg(feature = "e2e-test")]`; the previous normal-build no-op facade was removed.
- Observer payload construction is gated at call sites with `#[cfg(feature = "e2e-test")]`, including `panel_ready`, `selection_changed`, `action_requested`, `quit_requested`, and `emit_rows_rendered` calls.
- Panel E2E DTOs/helpers (`PanelE2eRowKey`, `PanelE2eRect`, `PanelE2eRenderedRow`, `PanelE2eRowsRendered`, `App::emit_rows_rendered`) are now behind `#[cfg(feature = "e2e-test")]`, so the normal panel render path no longer builds row snapshots or retains that runtime helper path.
- The background-task hold seam is still feature-gated: `check_background_task_hold` and `release_background_task_hold` calls are under `#[cfg(feature = "e2e-test")]`, and `YOI_TUI_TEST_HOLD_BACKGROUND_TASK` behavior lives in the gated observer module.
- Mouse capture tracking remains intact in the harness: it tracks `?1000h` and `?1006h`, `click(...)` requires both capture modes before injecting PTY bytes, the test waits for rendered rows, asserts `selection_changed`, and asserts no `action_requested` dispatch.
- Quit-latency coverage remains intact: the test waits for `panel_ready`, then verifies an actual pending `reload` background-task barrier before sending Ctrl+C through the PTY and asserting bounded exit.
- The production/non-production boundary now satisfies the Ticket intent: the harness remains opt-in, observability is read-only and feature-gated, and no UI input/action path is bypassed.
Validation run in `/home/hare/Projects/yoi/.worktree/e2e-harness`:
- `git diff --check 134e8b8b..HEAD` — passed.
- `cargo fmt --check` — passed.
- `cargo check -p tui --all-targets` — passed.
- `cargo check -p yoi --all-targets` — passed.
- `cargo check -p tui --all-targets --features e2e-test` — passed.
- `cargo check -p yoi --all-targets --features e2e-test` — passed.
- `cargo build -p yoi --features e2e-test` — passed.
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-harness/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed; 2 tests passed.
- `cargo check -p yoi-e2e --all-targets --features e2e` — passed.
No source changes were made during re-review.
---
<!-- event: implementation_report author: orchestrator at: 2026-06-13T15:23:35Z -->
## Implementation report
Integration outcome: merged and validated.
- Implementation branch: `ticket-00001KSKBP9YG-e2e-harness`
- Implementation commits: `96561897 test: add opt-in panel e2e harness`, `10a1c383 test: harden panel e2e harness`, `b30b43b9 test: cfg-gate e2e observer payloads`
- Review commits/events: initial `request_changes` for production-boundary leakage, then `approve` after `e2e-test` cfg gating。
- Orchestrator merge commit: `b3bd6b11 merge: e2e harness`
Implemented first vertical slice:
- Added opt-in `tests/e2e` package `yoi-e2e` with Playwright-like `PanelHarness` API for real `yoi panel` process automation through PTY.
- Added feature-gated read-only TUI observer behind `tui/e2e-test` / `yoi/e2e-test`; normal builds do not compile observer module, event payload construction, row DTOs, or background hold seam.
- Added Panel mouse selection E2E that waits for rendered rows, verifies terminal mouse capture output (`?1000h` and `?1006h`), sends click through PTY, asserts selection change, and asserts no action dispatch.
- Added Panel quit latency E2E that creates a feature-gated pending reload barrier, sends Ctrl+C through PTY, and asserts bounded exit.
- Artifacts include event log, input log, raw PTY output, and run metadata under `target/e2e-artifacts`.
Orchestrator validation after merge:
- `cargo fmt --check`: PASS
- `cargo check -p tui --all-targets`: PASS
- `cargo check -p yoi --all-targets`: PASS
- `cargo check -p tui --all-targets --features e2e-test`: PASS
- `cargo check -p yoi --all-targets --features e2e-test`: PASS
- `cargo build -p yoi --features e2e-test`: PASS
- `YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/orchestration/yoi-orchestrator/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture`: PASS(2 tests)
- `cargo check -p yoi-e2e --all-targets --features e2e`: PASS
- `git diff --check`: PASS
Remaining gaps / risks:
- Harness is Unix PTY based。
- Screen artifact is raw PTY output rather than parsed terminal snapshot。
- This is a first vertical slice for Panel/TUI PTY E2E; broader Pod protocol/provider stub scenarios remain future work under this E2E harness direction。
Next:
- Mark Ticket `done` and clean up child coder/reviewer Pods plus implementation worktree/branch. Closure remains separate.
---
<!-- event: state_changed author: orchestrator at: 2026-06-13T15:23:44Z from: inprogress to: done reason: merged_and_validated field: state -->
## State changed
E2E harness implementation branch was reviewed, approved after requested production-boundary changes, merged into the Orchestrator branch as `b3bd6b11`, and validated in the Orchestrator worktree. Opt-in Panel PTY E2E tests for mouse selection and quit latency passed, along with formatting, diff check, normal/e2e feature package checks, and E2E package check. Ticket implementation work is done; closure remains separate.
---
<!-- event: comment author: orchestrator at: 2026-06-13T15:27:18Z -->
## Comment
Post-merge design gap: E2E harness の `yoi` binary freshness はまだ自動保証されていない。
Current behavior:
- `tests/e2e/src/lib.rs::yoi_binary()` は `YOI_E2E_BIN` があればその path を使う。
- `YOI_E2E_BIN` が無い場合は E2E test binary の `current_exe()` から `target/{debug,release}/yoi` を推測し、最後に `target/debug/yoi` へ fallback する。
- Harness は `PanelHarness::spawn` と fixture setup commands の両方でその binary path を使い、`YOI_POD_RUNTIME_COMMAND` も同じ binary に向ける。
- しかし harness 自身は `cargo build -p yoi --features e2e-test` を実行しない。したがって任意タイミングの `cargo test -p yoi-e2e --features e2e` だけでは、最新 source から rebuild された binary が使われる保証はない。
Gap:
- 今回の validation は Orchestrator が事前に `cargo build -p yoi --features e2e-test` を実行したため正しい binary を使った。
- ただし harness design としては freshness が runner/manual discipline に依存しており、stale `target/debug/yoi` や別 path の `YOI_E2E_BIN` を使っても test が走り得る。
Follow-up direction:
- `cargo xtask e2e` / `yoi-e2e-runner` / documented `just e2e` など、必ず `cargo build -p yoi --features e2e-test` を実行してから `YOI_E2E_BIN=<fresh target binary> cargo test -p yoi-e2e --features e2e ...` する single entrypoint が必要。
- さらに harness は起動 binary が `e2e-test` feature 有効であることを handshake/event/version で検証し、可能なら source commit/build timestamp/path metadata を artifact に残して stale/mismatched binary を diagnostic にするべき。
---
<!-- event: decision author: orchestrator at: 2026-06-13T15:43:37Z -->
## Decision
Follow-up design note: E2E の `yoi` binary freshness は `cargo run` 直起動より、harness 内 `cargo build` + built binary spawn を標準にする。
Decision candidate:
- `cargo test -p yoi-e2e --features e2e` の test setup から `cargo build -p yoi --features e2e-test --bin yoi` を実行することは可能で、opt-in E2E では許容する。
- ただし PTY scenario の process-under-test を `cargo run ... -- panel` にするのは避ける。Cargo wrapper の build output、process tree、signal forwarding、exit timing が混ざり、Panel quit latency の測定対象が曖昧になるため。
- Harness には `BinaryProvider::CargoBuild` のような起動経路を持たせ、test 開始時に current workspace source から `yoi` を build し、得られた `target/{profile}/yoi` path を PTY で直接 spawn する。
- これにより「任意タイミングの E2E 実行で最新 source から作った binary を使う」ことを起動経路として保証しつつ、実際の UI/latency 測定は Cargo wrapper ではなく `yoi` binary 本体を対象にできる。
- 複数 test の重複 build は `OnceLock`/suite setup 等で 1 回にまとめる。parallel test 実行時の cargo target lock 待ちは opt-in E2E では許容し、必要なら serial 化する。
Rationale:
- 起動後 handshake で正しさを検証するより、起動経路として build step を harness に内蔵する方が単純。
- `cargo run` は可能だが、`run` は build + wrapper spawn を同時に行うため、PTY/Signal/timing の被測定経路に Cargo が入ってしまう。`cargo build` と direct binary spawn に分ける方が E2E の oracle が明確。
---
<!-- event: decision author: orchestrator at: 2026-06-13T15:45:26Z -->
## Decision
Follow-up requested by user: E2E harness should build the current `yoi` binary itself instead of relying on a prebuilt `YOI_E2E_BIN` / inferred `target/debug/yoi`.
Required correction:
- Default E2E binary provider should run `cargo build -p yoi --features e2e-test --bin yoi` from the workspace root at test time, then spawn the resulting `target/{profile}/yoi` directly through PTY.
- `YOI_E2E_BIN` may remain as an explicit override, but normal arbitrary `cargo test -p yoi-e2e --features e2e ...` should use a freshly built binary without requiring a separate manual build step.
- Do not use `cargo run` as the process-under-test because that would put Cargo in the PTY/signal/quit-latency measurement path.
- Preserve the existing production/non-production boundary and E2E feature gating.
---
<!-- event: state_changed author: hare at: 2026-06-13T16:34:06Z from: done to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-13T16:34:06Z status: closed -->
## 完了
Closed after prior done-state completion.
---
-85
View File
@@ -1,85 +0,0 @@
---
title: "内部 Worker / 内部 Pod の Workflow 化"
state: 'closed'
created_at: "2026-05-27T00:00:03Z"
updated_at: '2026-06-13T09:56:34Z'
---
## Migration reference
- legacy_ticket: tickets/internal-worker-workflow.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# 内部 Worker / 内部 Pod の Workflow 化
## 背景
INSOMNIA が内部で固定 prompt を持って disposable Worker / 専用 Pod を立ち上げている経路がいくつかある:
- extract 活動抽出(`crates/memory/src/extract/prompt.rs::EXTRACT_SYSTEM_PROMPT`)
- consolidation 統合 + 整理(`tickets/memory-consolidation.md`、本チケット時点では実装中 / 直前)
- Compact(`PromptCatalog::compact_system`)
これらは実装内 `&str` 定数や `PromptCatalog` の overlay で管理されており、prompt の調整や運用カスタマイズが「コード変更 + 再ビルド」を要する。一方、ユーザー向け `/<slug>` Workflow(`tickets/workflow.md`)は `<workspace_root>/.insomnia/workflow/<slug>.md` に住み、frontmatter + Markdown 本文 + `requires` Knowledge inject を持つ宣言形式で運用できる。
両者を寄せ、内部 Worker / 内部 Pod の prompt + ツール surface + Knowledge 依存を **Workflow と同一仕様で記述** できる経路を用意する。これにより:
- 内部 prompt の運用調整が workspace 側でできる(コード変更不要)
- consolidation の prompt 案 (`docs/plan/memory-prompts.md`) を workspace に直接 ingest できる
- 将来 consolidation を独立 Pod に引き上げる際も、Workflow を submit する形に揃えられる
## 要件
### Workflow の役割拡張
`tickets/workflow.md` の Workflow 仕様は「ユーザーが `/<slug>` で submit する制約付き作業」だが、本チケットでは **内部トリガー(Pod 内部の状態遷移)から呼び出される Workflow** を一級扱いに広げる。
- 同じファイル形式(`.insomnia/workflow/<slug>.md`)、同じ frontmatter / Linter
- `user_invocable: false` で `/<slug>` 経路から見えなくする
- `model_invokation` は通常 Pod 用の system prompt 注入仕様のまま(内部 Workflow は通常 OFF)
- 内部 Workflow を識別するキー(例: `internal_role`)と、必要なツール surface を表明する手段を frontmatter に追加する。具体 schema は実装で詰める
### 内部呼び出し経路
Pod 側の既存トリガー(extract post-run / consolidation staging 閾値 / Compact 閾値 等)は固定 `&str` の代わりに Workflow loader 経由で:
1. 内部識別キーで該当 Workflow を解決(衝突時は workspace 上書き優先、なければ insomnia bundled default)
2. `requires` Knowledge を本文の前に inject
3. Workflow 本文を sub-Worker / sub-Pod の prompt として渡す(system prompt 扱いか初回 submit 扱いかは内部用途で固定し、role ごとに揃える)
4. 既存のツール登録ロジックは Workflow が表明したツール surface に従う
### Bundled defaults
ユーザー workspace に該当 Workflow が無い場合に備え、insomnia 同梱の default Workflow を読む層を `PromptCatalog` の overlay と整合する形で持つ。
- 既存の Pod prompt 4 層 overlay(builtin / user / workspace / pod-pack)と同じ優先順
- bundled default の物理配置は実装で決める
### 関連チケットとの順序
- `tickets/workflow.md`(ユーザー向け Workflow 本体)が先行する。本チケットはその仕様を前提に「内部呼び出し経路」を追加する側
- `tickets/memory-consolidation.md` は当面 `&str` 定数で実装してよい。本チケット完了時に Workflow 化に乗り換える
- extract / Compact も同様に role ごとに段階移行
## 範囲外
- Workflow 仕様自体の本体実装(`tickets/workflow.md`)
- 内部 Workflow の自動生成(consolidation の offer 等。`docs/plan/memory.md` §Offer 経路 / 将来検討)
- 既存 `&str` 定数の物理削除タイミング(移行が完了した role ごとに削除する運用)
- `model_invokation` 注入予算の最適化(既存 Knowledge 常駐注入予算と合算する規約は `docs/plan/memory.md` 側)
## 完了条件
- 各内部 Worker / 内部 Pod(少なくとも extract / consolidation / Compact のうち、本チケット着手時点で実装済みのもの)が内部識別キー付き Workflow を解決して prompt とツール surface を組み立てる
- workspace で `.insomnia/workflow/<slug>.md` を上書きすれば内部 Worker の prompt が変わる
- workspace に該当 Workflow が無い場合、bundled default が使われる
- `user_invocable: false` の内部 Workflow は `/<slug>` 候補から除外され、ユーザーからは呼べない
- 内部 Workflow も consolidation の自動書き込み禁止対象のまま(Linter で構造的担保、`workflow.md` と整合)
- 単体テストで bundled default / workspace overlay / ツール surface 表明 + 解決 + 適用がカバーされる
## 参照
- 前提: `tickets/workflow.md`
- 最初の利用者: `tickets/memory-consolidation.md`
- 関連: `tickets/agent-skills.md`(外部 SKILL ingest 経路。本チケットの内部呼び出し経路とは別軸)
- 設計: `docs/plan/workflow.md`、`docs/plan/memory.md`、`docs/plan/memory-prompts.md`
-11
View File
@@ -1,11 +0,0 @@
## Resolution
ユーザー指示により close する。
この Ticket は legacy migration 由来の「内部 Worker / 内部 Pod を Workflow と同一仕様で扱う」構想だったが、現在の設計では Workflow と Prompt resource / internal prompt は別 boundary として整理されている。
- public builtin workflow / Yoi dogfood workflow の分離、`resources/workflows/<slug>.md`、workspace override、builtin provenance は関連 Ticket で対応済み。
- internal prompt は `resources/prompts/internal/*` と `PromptCatalog` / `resources/prompts/internal.toml` 側の責務として扱う。
- 元の要件に残る `INSOMNIA`、`.insomnia/workflow`、旧 `tickets/*.md` 前提は current Yoi 設計と一致しない。
したがって、この Ticket は実装 routing せず、退役 / superseded として完了扱いにする。将来、internal prompt の remaining gap や internal Workflow substrate が必要になった場合は、現在の Prompt resource / Workflow boundary を前提にした別の concrete Ticket として作成する。
-85
View File
@@ -1,85 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:03Z -->
## Migrated
Migrated from tickets/internal-worker-workflow.md. No legacy review file was present at migration time.
---
<!-- event: plan author: ticket-intake at: 2026-06-13T09:25:59Z -->
## Plan
## Intake refinement
既存 Ticket `00001KSKBPAXR` の body / thread / artifacts を確認した。artifacts は `.gitkeep` のみで、thread は migration 記録のみだった。重複 Ticket は作成しない。
### 現状整理
この Ticket は legacy migration 時点の前提を多く含んでいる。
- 旧名 `INSOMNIA`、旧 path `.insomnia/workflow/<slug>.md`、旧 `tickets/*.md` 参照が残っている。
- その後、Workflow / prompt resource 境界の設計は更新されている。
- `00001KTRKZ14C` は closed。public builtin workflow と Yoi dogfood workflow の分離、`resources/workflows/<slug>.md`、`WorkflowSource::Builtin`、workspace override、resident core/optional 方針を記録済み。
- `00001KTGFMW70` は closed。embedded builtin Workflow resources、Workflow-required builtin Knowledge fallback/provenance、workspace override を実装済み。
- 現在の internal prompt は `resources/prompts/internal/{memory_extract_system,memory_consolidation_system,compact_system}.md` と `PromptCatalog` / `resources/prompts/internal.toml` 側で扱われている。
### Intake 判断
現時点で、この Ticket を元のまま「内部 Worker / 内部 Pod を Workflow と同一仕様で実行する」実装 Ticket として route するのは危険。現在の設計では、Workflow は手続き・procedural flow、Prompt resources は system prompt / role behavior / internal worker prompt を所有する別 boundary であり、両者を混ぜると prompt-context / workflow-boundary / tool authority の責務が曖昧になる。
したがって readiness は `requirements_sync_needed`。Orchestrator に渡す前に、人間/maintainer が次のいずれかを選ぶ必要がある。
1. **退役 / superseded 扱い**: この legacy Ticket は `00001KTRKZ14C`、`00001KTGFMW70`、および現在の `PromptCatalog` internal prompt resource 化で実質的に置き換えられたとして、Orchestrator/human が close する。
2. **PromptCatalog follow-up へ retarget**: Workflow 化ではなく、internal worker prompt の remaining gap を concrete に切り直す。例: extract / consolidation / compact の workspace/user/prompt-pack override、provenance diagnostics、test coverage、docs の不足確認。
3. **真の internal Workflow 呼び出し substrate を新設**: 既存の Prompt resource / Workflow boundary を変更する設計 Ticket として再定義する。この場合は、なぜ PromptCatalog では不足か、tool surface 表明を workflow frontmatter に載せる authority model をどう安全にするか、`user_invocable: false` と resident/launch provenance をどう扱うかを先に設計判断する必要がある。
### Binding decisions / invariants for any refinement
- Workflow prose、Prompt fragments/internal prompts、Knowledge records は別 resource boundary として扱う。混ぜる場合は明示的な設計判断が必要。
- 内部 Worker prompt を model-visible context に載せる場合も、turn を跨ぐ volatile hidden injection にならないよう、既存の history / prompt context 原則に従う。
- `resources/prompts` にある internal prompt は PromptCatalog の責務であり、Workflow loader の責務へ silently 移さない。
- `resources/workflows` の builtin workflow は procedural flow の resource であり、Yoi dogfood semantics を public builtin slug に隠さない。
- `INSOMNIA` / `.insomnia` / legacy `tickets/*.md` 参照は current Ticket routing 前に Yoi / `.yoi` / canonical Ticket ID へ読み替えまたは整理する。
### Risk flags / reviewer focus
- `prompt-context`
- `workflow-boundary`
- `runtime-resource`
- `tool-authority`
- `memory-prompt`
- `migration-compat`
### Open question
この Ticket は退役させるか、PromptCatalog follow-up に切り直すか、internal Workflow substrate の新設設計として再定義するか。現時点ではこの人間判断がないため、`ready` にはしない。
---
<!-- event: state_changed author: hare at: 2026-06-13T09:56:34Z from: planning to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-13T09:56:34Z status: closed -->
## 完了
## Resolution
ユーザー指示により close する。
この Ticket は legacy migration 由来の「内部 Worker / 内部 Pod を Workflow と同一仕様で扱う」構想だったが、現在の設計では Workflow と Prompt resource / internal prompt は別 boundary として整理されている。
- public builtin workflow / Yoi dogfood workflow の分離、`resources/workflows/<slug>.md`、workspace override、builtin provenance は関連 Ticket で対応済み。
- internal prompt は `resources/prompts/internal/*` と `PromptCatalog` / `resources/prompts/internal.toml` 側の責務として扱う。
- 元の要件に残る `INSOMNIA`、`.insomnia/workflow`、旧 `tickets/*.md` 前提は current Yoi 設計と一致しない。
したがって、この Ticket は実装 routing せず、退役 / superseded として完了扱いにする。将来、internal prompt の remaining gap や internal Workflow substrate が必要になった場合は、現在の Prompt resource / Workflow boundary を前提にした別の concrete Ticket として作成する。
---
-148
View File
@@ -1,148 +0,0 @@
---
title: "Pod/TUI: 手動 rewind 導線"
state: "closed"
created_at: "2026-05-27T00:00:04Z"
updated_at: "2026-05-29T03:09:22Z"
---
## Background
`pod-empty-turn-rollback` / `tui-empty-turn-restore` により、AI 側出力が 0 の interrupted turn については Pod 側で自動 rollback し、TUI 側で入力を復元できるようになった。
次に欲しいのは、直前 turn だけの rollback command ではなく、TUI から過去の user message を選び、その地点まで会話を戻してその入力を composer に復元する **manual rewind** 導線である。
誤送信、モデル選択ミス、途中で方針を変えた場合などに、ユーザーは過去の入力を選び直し、必要なら編集してから Enter で retry できる。選択した瞬間に再実行はしない。
## UX
- `:rewind` command を追加する。
- `:rollback` は `:rewind` の alias として扱ってよい。
- `Ctrl+R` は rewind/rollback を表す shortcut として、同じ picker を開く。
- `:rewind` / `Ctrl+R` は引数を取らず、TUI 内の picker を開く。
- Rewind picker は popup/overlay ではなく、通常の conversation/history view area を一時的に置き換える dedicated view として表示する。
- composer/input area と actionbar/status area は通常通り残す。
- main view area だけが message history から rewind target list に切り替わる。
- Esc 等で picker を閉じると、通常の conversation/history view に戻る。
- `:rewind` command は `Idle` / `Paused` の時だけ picker を開く。`Running` 中は visible diagnostic を出して何もしない。
- `Ctrl+R` shortcut も Pod が停止中 (`Idle` または `Paused`) の時だけ有効にする。`Running` 中は無視または visible diagnostic にする。
- picker は過去の user message を新しい順に表示する。
- turn number / index
- timestamp または relative time
- message preview
- eligible / disabled reason
- picker で user message を選択すると、Pod はその user message の直前まで history/session log を rewind し、選択された message を TUI composer に復元する。
- 選択後は、composer に該当 message が入っている状態になる。
- Enter を押すとその message で retry できる。
- ユーザーは送信前に編集できる。
- 選択しただけで自動実行しない。
- Esc 等で picker を閉じると何も変更しない。
## Semantics
Manual rewind は destructive operation として扱う。選択地点より後の履歴 suffix は捨てる。fork は優先度低めの別機能であり、この ticket の実装では fork を作らない。
- Rewind は current active segment/session に対して行う。
- Rewind 成功時、選択された `UserInput` entry 自体も履歴から取り除かれ、composer に戻る。
- Rewind 後、選択地点より後の assistant output / later user messages / usage entries / display blocks は現 branch から消える。
- 元 suffix を保持したい場合は将来の `pod-session-fork` で扱う。この ticket では保持しない。
- Tool side effect の undo はしない。
Initial safety policy:
- Pod が `Idle` または `Paused` の時だけ許可する。
- `Running` 中は拒否する。
- picker 表示時から head が変わった場合は apply 時に再検証して拒否する。
- segment rotation / compaction を跨ぐ rewind は初期実装では対象外でよい。
- suffix に tool call / tool result / other side-effect-looking entries が含まれる場合でも、初期方針としては destructive rewind を許可してよい。ただし UI には「以降の履歴は破棄され、tool side effects は undo されない」ことが分かる notice/diagnostic を出す。
- 実装上どうしても安全に整合性を保てない suffix 種別がある場合は、具体的な disabled reason を表示して拒否する。
## Protocol / ownership
TUI がローカルに履歴を削るのではなく、Pod が authoritative に rewind を検証・適用する。
Suggested protocol shape:
```rust
Method::ListRewindTargets { limit: Option<usize> }
Method::RewindTo {
target: RewindTargetId,
expected_head_entries: usize,
}
Event::RewindTargets { targets: Vec<RewindTarget> }
Event::RewindApplied {
entries: Vec<serde_json::Value>,
input: Vec<Segment>,
summary: RewindSummary,
}
```
Exact names may differ, but the behavior should stay:
- listing targets and applying a target are separate operations.
- apply revalidates target identity and current head.
- success returns enough entries for clients to reseed their view.
- success returns the selected user input segments so TUI can restore the composer.
- failure uses visible diagnostics, e.g. `Event::Error { code: InvalidRequest, message }`.
`RunResult::RolledBack` should not be reused for this idle control operation. It remains the run-lifecycle signal for submit-time empty-turn rollback.
## Implementation notes
- Target identity can initially be current segment + entry index:
```rust
RewindTargetId {
segment_id: SegmentId,
user_input_entry_index: usize,
}
```
- Include `expected_head_entries` to reject stale picker selections.
- Each target should include:
- preview
- original `Vec<Segment>`
- turn/index metadata if available
- whether the target is eligible
- disabled/warning reason if relevant
- the entry count to truncate to, which is before the selected user message.
- Rewind apply must keep these in sync:
- worker history
- `user_segments`
- session store segment log
- `SegmentLogSink` mirror
- usage history / trackers
- TUI view reconstructed from returned entries
- If a complete current-state reconstruction from log is simpler and safer than maintaining many historical snapshots, prefer that over fragile partial truncation.
## Acceptance criteria
- `:rewind` opens a picker of past user messages by replacing the normal conversation/history view area, not by drawing a small popup.
- `Ctrl+R` opens the same picker only while Pod status is `Idle` or `Paused`; it is disabled/rejected while `Running`.
- Selecting a message rewinds the Pod state to before that message and restores the message into the TUI composer.
- Rewind does not auto-run; pressing Enter after selection retries the restored message.
- Rewind success updates Pod session log, SegmentLogSink mirror, worker state, and TUI display consistently.
- Esc returns from the rewind picker to the normal conversation/history view without changing Pod state.
- Rewind failure leaves state unchanged and shows a clear reason.
- Picker selections are revalidated at apply time to avoid stale-head corruption.
- Rewound suffix is intentionally discarded; no fork is created.
- Tool side effects are not undone; UI/diagnostics make this clear when relevant.
- Tests cover target listing, apply success, stale-head rejection, composer restore, TUI display reseed, and at least one suffix-with-tool case.
- `cargo fmt --check`
- `cargo check -p protocol -p pod -p tui`
- Relevant focused tests.
## Out of scope
- Creating a fork when rewinding.
- Fork tree visualization.
- Merging branches.
- Undoing tool side effects.
- Rollback history stack / redo.
- Rewind across compacted segments unless it falls out naturally from implementation.
## Related
- `20260527-000009-pod-session-fork` remains a lower-priority future feature for preserving alternate histories.
- Completed: `pod-empty-turn-rollback`
- Completed: `tui-empty-turn-restore`
-155
View File
@@ -1,155 +0,0 @@
---
id: 20260527-000004-manual-turn-rollback
slug: manual-turn-rollback
title: Pod/TUI: 手動 rewind 導線
status: closed
kind: task
priority: P2
labels: [tui, pod, ux]
created_at: 2026-05-27T00:00:04Z
updated_at: 2026-05-29T03:09:22Z
assignee: null
legacy_ticket: tickets/manual-turn-rollback.md
---
## Background
`pod-empty-turn-rollback` / `tui-empty-turn-restore` により、AI 側出力が 0 の interrupted turn については Pod 側で自動 rollback し、TUI 側で入力を復元できるようになった。
次に欲しいのは、直前 turn だけの rollback command ではなく、TUI から過去の user message を選び、その地点まで会話を戻してその入力を composer に復元する **manual rewind** 導線である。
誤送信、モデル選択ミス、途中で方針を変えた場合などに、ユーザーは過去の入力を選び直し、必要なら編集してから Enter で retry できる。選択した瞬間に再実行はしない。
## UX
- `:rewind` command を追加する。
- `:rollback` は `:rewind` の alias として扱ってよい。
- `Ctrl+R` は rewind/rollback を表す shortcut として、同じ picker を開く。
- `:rewind` / `Ctrl+R` は引数を取らず、TUI 内の picker を開く。
- Rewind picker は popup/overlay ではなく、通常の conversation/history view area を一時的に置き換える dedicated view として表示する。
- composer/input area と actionbar/status area は通常通り残す。
- main view area だけが message history から rewind target list に切り替わる。
- Esc 等で picker を閉じると、通常の conversation/history view に戻る。
- `:rewind` command は `Idle` / `Paused` の時だけ picker を開く。`Running` 中は visible diagnostic を出して何もしない。
- `Ctrl+R` shortcut も Pod が停止中 (`Idle` または `Paused`) の時だけ有効にする。`Running` 中は無視または visible diagnostic にする。
- picker は過去の user message を新しい順に表示する。
- turn number / index
- timestamp または relative time
- message preview
- eligible / disabled reason
- picker で user message を選択すると、Pod はその user message の直前まで history/session log を rewind し、選択された message を TUI composer に復元する。
- 選択後は、composer に該当 message が入っている状態になる。
- Enter を押すとその message で retry できる。
- ユーザーは送信前に編集できる。
- 選択しただけで自動実行しない。
- Esc 等で picker を閉じると何も変更しない。
## Semantics
Manual rewind は destructive operation として扱う。選択地点より後の履歴 suffix は捨てる。fork は優先度低めの別機能であり、この ticket の実装では fork を作らない。
- Rewind は current active segment/session に対して行う。
- Rewind 成功時、選択された `UserInput` entry 自体も履歴から取り除かれ、composer に戻る。
- Rewind 後、選択地点より後の assistant output / later user messages / usage entries / display blocks は現 branch から消える。
- 元 suffix を保持したい場合は将来の `pod-session-fork` で扱う。この ticket では保持しない。
- Tool side effect の undo はしない。
Initial safety policy:
- Pod が `Idle` または `Paused` の時だけ許可する。
- `Running` 中は拒否する。
- picker 表示時から head が変わった場合は apply 時に再検証して拒否する。
- segment rotation / compaction を跨ぐ rewind は初期実装では対象外でよい。
- suffix に tool call / tool result / other side-effect-looking entries が含まれる場合でも、初期方針としては destructive rewind を許可してよい。ただし UI には「以降の履歴は破棄され、tool side effects は undo されない」ことが分かる notice/diagnostic を出す。
- 実装上どうしても安全に整合性を保てない suffix 種別がある場合は、具体的な disabled reason を表示して拒否する。
## Protocol / ownership
TUI がローカルに履歴を削るのではなく、Pod が authoritative に rewind を検証・適用する。
Suggested protocol shape:
```rust
Method::ListRewindTargets { limit: Option<usize> }
Method::RewindTo {
target: RewindTargetId,
expected_head_entries: usize,
}
Event::RewindTargets { targets: Vec<RewindTarget> }
Event::RewindApplied {
entries: Vec<serde_json::Value>,
input: Vec<Segment>,
summary: RewindSummary,
}
```
Exact names may differ, but the behavior should stay:
- listing targets and applying a target are separate operations.
- apply revalidates target identity and current head.
- success returns enough entries for clients to reseed their view.
- success returns the selected user input segments so TUI can restore the composer.
- failure uses visible diagnostics, e.g. `Event::Error { code: InvalidRequest, message }`.
`RunResult::RolledBack` should not be reused for this idle control operation. It remains the run-lifecycle signal for submit-time empty-turn rollback.
## Implementation notes
- Target identity can initially be current segment + entry index:
```rust
RewindTargetId {
segment_id: SegmentId,
user_input_entry_index: usize,
}
```
- Include `expected_head_entries` to reject stale picker selections.
- Each target should include:
- preview
- original `Vec<Segment>`
- turn/index metadata if available
- whether the target is eligible
- disabled/warning reason if relevant
- the entry count to truncate to, which is before the selected user message.
- Rewind apply must keep these in sync:
- worker history
- `user_segments`
- session store segment log
- `SegmentLogSink` mirror
- usage history / trackers
- TUI view reconstructed from returned entries
- If a complete current-state reconstruction from log is simpler and safer than maintaining many historical snapshots, prefer that over fragile partial truncation.
## Acceptance criteria
- `:rewind` opens a picker of past user messages by replacing the normal conversation/history view area, not by drawing a small popup.
- `Ctrl+R` opens the same picker only while Pod status is `Idle` or `Paused`; it is disabled/rejected while `Running`.
- Selecting a message rewinds the Pod state to before that message and restores the message into the TUI composer.
- Rewind does not auto-run; pressing Enter after selection retries the restored message.
- Rewind success updates Pod session log, SegmentLogSink mirror, worker state, and TUI display consistently.
- Esc returns from the rewind picker to the normal conversation/history view without changing Pod state.
- Rewind failure leaves state unchanged and shows a clear reason.
- Picker selections are revalidated at apply time to avoid stale-head corruption.
- Rewound suffix is intentionally discarded; no fork is created.
- Tool side effects are not undone; UI/diagnostics make this clear when relevant.
- Tests cover target listing, apply success, stale-head rejection, composer restore, TUI display reseed, and at least one suffix-with-tool case.
- `cargo fmt --check`
- `cargo check -p protocol -p pod -p tui`
- Relevant focused tests.
## Out of scope
- Creating a fork when rewinding.
- Fork tree visualization.
- Merging branches.
- Undoing tool side effects.
- Rollback history stack / redo.
- Rewind across compacted segments unless it falls out naturally from implementation.
## Related
- `20260527-000009-pod-session-fork` remains a lower-priority future feature for preserving alternate histories.
- Completed: `pod-empty-turn-rollback`
- Completed: `tui-empty-turn-restore`
-170
View File
@@ -1,170 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:04Z -->
## Migrated
Migrated from tickets/manual-turn-rollback.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-29T03:09:22Z status: closed -->
## Closed
---
id: 20260527-000004-manual-turn-rollback
slug: manual-turn-rollback
title: Pod/TUI: 手動 rewind 導線
status: closed
kind: task
priority: P2
labels: [tui, pod, ux]
created_at: 2026-05-27T00:00:04Z
updated_at: 2026-05-29T03:09:22Z
assignee: null
legacy_ticket: tickets/manual-turn-rollback.md
---
## Background
`pod-empty-turn-rollback` / `tui-empty-turn-restore` により、AI 側出力が 0 の interrupted turn については Pod 側で自動 rollback し、TUI 側で入力を復元できるようになった。
次に欲しいのは、直前 turn だけの rollback command ではなく、TUI から過去の user message を選び、その地点まで会話を戻してその入力を composer に復元する **manual rewind** 導線である。
誤送信、モデル選択ミス、途中で方針を変えた場合などに、ユーザーは過去の入力を選び直し、必要なら編集してから Enter で retry できる。選択した瞬間に再実行はしない。
## UX
- `:rewind` command を追加する。
- `:rollback` は `:rewind` の alias として扱ってよい。
- `Ctrl+R` は rewind/rollback を表す shortcut として、同じ picker を開く。
- `:rewind` / `Ctrl+R` は引数を取らず、TUI 内の picker を開く。
- Rewind picker は popup/overlay ではなく、通常の conversation/history view area を一時的に置き換える dedicated view として表示する。
- composer/input area と actionbar/status area は通常通り残す。
- main view area だけが message history から rewind target list に切り替わる。
- Esc 等で picker を閉じると、通常の conversation/history view に戻る。
- `:rewind` command は `Idle` / `Paused` の時だけ picker を開く。`Running` 中は visible diagnostic を出して何もしない。
- `Ctrl+R` shortcut も Pod が停止中 (`Idle` または `Paused`) の時だけ有効にする。`Running` 中は無視または visible diagnostic にする。
- picker は過去の user message を新しい順に表示する。
- turn number / index
- timestamp または relative time
- message preview
- eligible / disabled reason
- picker で user message を選択すると、Pod はその user message の直前まで history/session log を rewind し、選択された message を TUI composer に復元する。
- 選択後は、composer に該当 message が入っている状態になる。
- Enter を押すとその message で retry できる。
- ユーザーは送信前に編集できる。
- 選択しただけで自動実行しない。
- Esc 等で picker を閉じると何も変更しない。
## Semantics
Manual rewind は destructive operation として扱う。選択地点より後の履歴 suffix は捨てる。fork は優先度低めの別機能であり、この ticket の実装では fork を作らない。
- Rewind は current active segment/session に対して行う。
- Rewind 成功時、選択された `UserInput` entry 自体も履歴から取り除かれ、composer に戻る。
- Rewind 後、選択地点より後の assistant output / later user messages / usage entries / display blocks は現 branch から消える。
- 元 suffix を保持したい場合は将来の `pod-session-fork` で扱う。この ticket では保持しない。
- Tool side effect の undo はしない。
Initial safety policy:
- Pod が `Idle` または `Paused` の時だけ許可する。
- `Running` 中は拒否する。
- picker 表示時から head が変わった場合は apply 時に再検証して拒否する。
- segment rotation / compaction を跨ぐ rewind は初期実装では対象外でよい。
- suffix に tool call / tool result / other side-effect-looking entries が含まれる場合でも、初期方針としては destructive rewind を許可してよい。ただし UI には「以降の履歴は破棄され、tool side effects は undo されない」ことが分かる notice/diagnostic を出す。
- 実装上どうしても安全に整合性を保てない suffix 種別がある場合は、具体的な disabled reason を表示して拒否する。
## Protocol / ownership
TUI がローカルに履歴を削るのではなく、Pod が authoritative に rewind を検証・適用する。
Suggested protocol shape:
```rust
Method::ListRewindTargets { limit: Option<usize> }
Method::RewindTo {
target: RewindTargetId,
expected_head_entries: usize,
}
Event::RewindTargets { targets: Vec<RewindTarget> }
Event::RewindApplied {
entries: Vec<serde_json::Value>,
input: Vec<Segment>,
summary: RewindSummary,
}
```
Exact names may differ, but the behavior should stay:
- listing targets and applying a target are separate operations.
- apply revalidates target identity and current head.
- success returns enough entries for clients to reseed their view.
- success returns the selected user input segments so TUI can restore the composer.
- failure uses visible diagnostics, e.g. `Event::Error { code: InvalidRequest, message }`.
`RunResult::RolledBack` should not be reused for this idle control operation. It remains the run-lifecycle signal for submit-time empty-turn rollback.
## Implementation notes
- Target identity can initially be current segment + entry index:
```rust
RewindTargetId {
segment_id: SegmentId,
user_input_entry_index: usize,
}
```
- Include `expected_head_entries` to reject stale picker selections.
- Each target should include:
- preview
- original `Vec<Segment>`
- turn/index metadata if available
- whether the target is eligible
- disabled/warning reason if relevant
- the entry count to truncate to, which is before the selected user message.
- Rewind apply must keep these in sync:
- worker history
- `user_segments`
- session store segment log
- `SegmentLogSink` mirror
- usage history / trackers
- TUI view reconstructed from returned entries
- If a complete current-state reconstruction from log is simpler and safer than maintaining many historical snapshots, prefer that over fragile partial truncation.
## Acceptance criteria
- `:rewind` opens a picker of past user messages by replacing the normal conversation/history view area, not by drawing a small popup.
- `Ctrl+R` opens the same picker only while Pod status is `Idle` or `Paused`; it is disabled/rejected while `Running`.
- Selecting a message rewinds the Pod state to before that message and restores the message into the TUI composer.
- Rewind does not auto-run; pressing Enter after selection retries the restored message.
- Rewind success updates Pod session log, SegmentLogSink mirror, worker state, and TUI display consistently.
- Esc returns from the rewind picker to the normal conversation/history view without changing Pod state.
- Rewind failure leaves state unchanged and shows a clear reason.
- Picker selections are revalidated at apply time to avoid stale-head corruption.
- Rewound suffix is intentionally discarded; no fork is created.
- Tool side effects are not undone; UI/diagnostics make this clear when relevant.
- Tests cover target listing, apply success, stale-head rejection, composer restore, TUI display reseed, and at least one suffix-with-tool case.
- `cargo fmt --check`
- `cargo check -p protocol -p pod -p tui`
- Relevant focused tests.
## Out of scope
- Creating a fork when rewinding.
- Fork tree visualization.
- Merging branches.
- Undoing tool side effects.
- Rollback history stack / redo.
- Rewind across compacted segments unless it falls out naturally from implementation.
## Related
- `20260527-000009-pod-session-fork` remains a lower-priority future feature for preserving alternate histories.
- Completed: `pod-empty-turn-rollback`
- Completed: `tui-empty-turn-restore`
---
-80
View File
@@ -1,80 +0,0 @@
---
title: "プロンプト: memory / knowledge tool 利用タイミングのガイダンス"
state: "closed"
created_at: "2026-05-27T00:00:05Z"
updated_at: "2026-05-28T23:59:06Z"
---
## Migration reference
- legacy_ticket: tickets/memory-tool-guidance-prompt.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# プロンプト: memory / knowledge tool 利用タイミングのガイダンス
## 背景
通常 Pod には `MemoryQuery` / `MemoryRead` / `KnowledgeQuery` / `MemoryWrite` 等の memory / knowledge tools が提供されているが、現状の通常 system prompt はそれらを「いつ使うべきか」をほとんど説明していない。
現在の `resources/prompts/common/tool-usage.md` は、既知パスなら Read、検索なら Grep/Glob、並列可能ならまとめる、という汎用 tool 方針に留まる。memory / knowledge tools の description には操作方法はあるが、モデルが自発的に memory lookup すべき状況は明示されていない。
このため、過去の決定・ユーザー嗜好・以前の経緯を問われても、モデルが `MemoryQuery` / `MemoryRead` を自発的に使わない可能性が高い。`summary.md` resident injection により短い durable context は常時見えるようになるが、詳細な過去判断や request を探すには query guidance が必要である。
## 方針
通常 Pod の system prompt に、memory / knowledge tools の利用タイミングを短く追加する。
目的は「必要な時に過去情報を探す」ことであり、毎 turn memory query を強制することではない。memory / knowledge は helpful context だが stale になり得るため、現在の user instruction / files / tickets / git state / session log を上書きする権威として扱わせない。
## 推奨する追加文言
`resources/prompts/common/tool-usage.md` に新しい小節を足すか、`resources/prompts/common/memory.md` を作って `default.md` から include する。
例:
```md
## Memory and knowledge
Use memory and knowledge tools when the user asks about past decisions, prior requests, durable preferences, project history, or why something was done. Do not guess from vague recollection when a targeted memory lookup would answer the question.
- Use `MemoryQuery` for durable memory records: summary, decisions, and requests.
- Use `KnowledgeQuery` for project knowledge records.
- Use `MemoryRead(kind=summary)` when you need the full workspace memory summary.
- Use `MemoryRead` on returned slugs when query excerpts are insufficient.
Resident memory and knowledge are helpful context but may be stale. Current user instructions, repository files, tickets, git history, and session logs are more authoritative for exact current state.
Do not query memory on every turn. Prefer it when past context, user preferences, or prior rationale materially affects the answer or implementation.
```
文言は実装時に自然に調整してよいが、以下の意味は維持する。
- 過去判断 / 過去依頼 / ユーザー嗜好 / project history / why 系では memory lookup を促す。
- `MemoryQuery`, `KnowledgeQuery`, `MemoryRead(kind=summary)`, slug read の役割を明示する。
- resident context は stale になり得ると明示する。
- current user instruction / files / tickets / git / session logs の方が exact current state では強いと明示する。
- 毎 turn query しないと明示する。
## 要件
- 通常 Pod の default prompt に memory / knowledge tool 利用タイミングの guidance が入る。
- internal prompts (`memory_extract_system`, `memory_consolidation_system`, `compact_system`) の挙動を変えない。
- guidance は短く、通常 turn の token overhead を過度に増やさない。
- guidance は memory / knowledge を current authority より上に置かない。
- guidance は毎 turn memory query を促さない。
- `MemoryWrite` / `MemoryEdit` / `MemoryDelete` の自発的利用を安易に促さない。
- 通常作業では read/query を促し、write/edit/delete は明示的な依頼または memory maintenance worker に寄せる。
## 完了条件
- `resources/prompts/default.md` から memory guidance が render される。
- prompt render / catalog 関連 test があれば更新されている。
- internal worker prompt には不要な memory guidance が混ざらない。
- `cargo fmt --check` と関連 test が通る。
## 範囲外
- `summary.md` resident injection の実装。これは `memory-summary-resident-injection.md` で扱う。
- memory tool descriptions の大幅変更。
- memory usage metrics の設計変更。
- global memory / project local memory の store 分離。
-87
View File
@@ -1,87 +0,0 @@
---
id: 20260527-000005-memory-tool-guidance-prompt
slug: memory-tool-guidance-prompt
title: プロンプト: memory / knowledge tool 利用タイミングのガイダンス
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:05Z
updated_at: 2026-05-28T23:59:06Z
assignee: null
legacy_ticket: tickets/memory-tool-guidance-prompt.md
---
## Migration reference
- legacy_ticket: tickets/memory-tool-guidance-prompt.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# プロンプト: memory / knowledge tool 利用タイミングのガイダンス
## 背景
通常 Pod には `MemoryQuery` / `MemoryRead` / `KnowledgeQuery` / `MemoryWrite` 等の memory / knowledge tools が提供されているが、現状の通常 system prompt はそれらを「いつ使うべきか」をほとんど説明していない。
現在の `resources/prompts/common/tool-usage.md` は、既知パスなら Read、検索なら Grep/Glob、並列可能ならまとめる、という汎用 tool 方針に留まる。memory / knowledge tools の description には操作方法はあるが、モデルが自発的に memory lookup すべき状況は明示されていない。
このため、過去の決定・ユーザー嗜好・以前の経緯を問われても、モデルが `MemoryQuery` / `MemoryRead` を自発的に使わない可能性が高い。`summary.md` resident injection により短い durable context は常時見えるようになるが、詳細な過去判断や request を探すには query guidance が必要である。
## 方針
通常 Pod の system prompt に、memory / knowledge tools の利用タイミングを短く追加する。
目的は「必要な時に過去情報を探す」ことであり、毎 turn memory query を強制することではない。memory / knowledge は helpful context だが stale になり得るため、現在の user instruction / files / tickets / git state / session log を上書きする権威として扱わせない。
## 推奨する追加文言
`resources/prompts/common/tool-usage.md` に新しい小節を足すか、`resources/prompts/common/memory.md` を作って `default.md` から include する。
例:
```md
## Memory and knowledge
Use memory and knowledge tools when the user asks about past decisions, prior requests, durable preferences, project history, or why something was done. Do not guess from vague recollection when a targeted memory lookup would answer the question.
- Use `MemoryQuery` for durable memory records: summary, decisions, and requests.
- Use `KnowledgeQuery` for project knowledge records.
- Use `MemoryRead(kind=summary)` when you need the full workspace memory summary.
- Use `MemoryRead` on returned slugs when query excerpts are insufficient.
Resident memory and knowledge are helpful context but may be stale. Current user instructions, repository files, tickets, git history, and session logs are more authoritative for exact current state.
Do not query memory on every turn. Prefer it when past context, user preferences, or prior rationale materially affects the answer or implementation.
```
文言は実装時に自然に調整してよいが、以下の意味は維持する。
- 過去判断 / 過去依頼 / ユーザー嗜好 / project history / why 系では memory lookup を促す。
- `MemoryQuery`, `KnowledgeQuery`, `MemoryRead(kind=summary)`, slug read の役割を明示する。
- resident context は stale になり得ると明示する。
- current user instruction / files / tickets / git / session logs の方が exact current state では強いと明示する。
- 毎 turn query しないと明示する。
## 要件
- 通常 Pod の default prompt に memory / knowledge tool 利用タイミングの guidance が入る。
- internal prompts (`memory_extract_system`, `memory_consolidation_system`, `compact_system`) の挙動を変えない。
- guidance は短く、通常 turn の token overhead を過度に増やさない。
- guidance は memory / knowledge を current authority より上に置かない。
- guidance は毎 turn memory query を促さない。
- `MemoryWrite` / `MemoryEdit` / `MemoryDelete` の自発的利用を安易に促さない。
- 通常作業では read/query を促し、write/edit/delete は明示的な依頼または memory maintenance worker に寄せる。
## 完了条件
- `resources/prompts/default.md` から memory guidance が render される。
- prompt render / catalog 関連 test があれば更新されている。
- internal worker prompt には不要な memory guidance が混ざらない。
- `cargo fmt --check` と関連 test が通る。
## 範囲外
- `summary.md` resident injection の実装。これは `memory-summary-resident-injection.md` で扱う。
- memory tool descriptions の大幅変更。
- memory usage metrics の設計変更。
- global memory / project local memory の store 分離。
-102
View File
@@ -1,102 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:05Z -->
## Migrated
Migrated from tickets/memory-tool-guidance-prompt.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-28T23:59:06Z status: closed -->
## Closed
---
id: 20260527-000005-memory-tool-guidance-prompt
slug: memory-tool-guidance-prompt
title: プロンプト: memory / knowledge tool 利用タイミングのガイダンス
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:05Z
updated_at: 2026-05-28T23:59:06Z
assignee: null
legacy_ticket: tickets/memory-tool-guidance-prompt.md
---
## Migration reference
- legacy_ticket: tickets/memory-tool-guidance-prompt.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# プロンプト: memory / knowledge tool 利用タイミングのガイダンス
## 背景
通常 Pod には `MemoryQuery` / `MemoryRead` / `KnowledgeQuery` / `MemoryWrite` 等の memory / knowledge tools が提供されているが、現状の通常 system prompt はそれらを「いつ使うべきか」をほとんど説明していない。
現在の `resources/prompts/common/tool-usage.md` は、既知パスなら Read、検索なら Grep/Glob、並列可能ならまとめる、という汎用 tool 方針に留まる。memory / knowledge tools の description には操作方法はあるが、モデルが自発的に memory lookup すべき状況は明示されていない。
このため、過去の決定・ユーザー嗜好・以前の経緯を問われても、モデルが `MemoryQuery` / `MemoryRead` を自発的に使わない可能性が高い。`summary.md` resident injection により短い durable context は常時見えるようになるが、詳細な過去判断や request を探すには query guidance が必要である。
## 方針
通常 Pod の system prompt に、memory / knowledge tools の利用タイミングを短く追加する。
目的は「必要な時に過去情報を探す」ことであり、毎 turn memory query を強制することではない。memory / knowledge は helpful context だが stale になり得るため、現在の user instruction / files / tickets / git state / session log を上書きする権威として扱わせない。
## 推奨する追加文言
`resources/prompts/common/tool-usage.md` に新しい小節を足すか、`resources/prompts/common/memory.md` を作って `default.md` から include する。
例:
```md
## Memory and knowledge
Use memory and knowledge tools when the user asks about past decisions, prior requests, durable preferences, project history, or why something was done. Do not guess from vague recollection when a targeted memory lookup would answer the question.
- Use `MemoryQuery` for durable memory records: summary, decisions, and requests.
- Use `KnowledgeQuery` for project knowledge records.
- Use `MemoryRead(kind=summary)` when you need the full workspace memory summary.
- Use `MemoryRead` on returned slugs when query excerpts are insufficient.
Resident memory and knowledge are helpful context but may be stale. Current user instructions, repository files, tickets, git history, and session logs are more authoritative for exact current state.
Do not query memory on every turn. Prefer it when past context, user preferences, or prior rationale materially affects the answer or implementation.
```
文言は実装時に自然に調整してよいが、以下の意味は維持する。
- 過去判断 / 過去依頼 / ユーザー嗜好 / project history / why 系では memory lookup を促す。
- `MemoryQuery`, `KnowledgeQuery`, `MemoryRead(kind=summary)`, slug read の役割を明示する。
- resident context は stale になり得ると明示する。
- current user instruction / files / tickets / git / session logs の方が exact current state では強いと明示する。
- 毎 turn query しないと明示する。
## 要件
- 通常 Pod の default prompt に memory / knowledge tool 利用タイミングの guidance が入る。
- internal prompts (`memory_extract_system`, `memory_consolidation_system`, `compact_system`) の挙動を変えない。
- guidance は短く、通常 turn の token overhead を過度に増やさない。
- guidance は memory / knowledge を current authority より上に置かない。
- guidance は毎 turn memory query を促さない。
- `MemoryWrite` / `MemoryEdit` / `MemoryDelete` の自発的利用を安易に促さない。
- 通常作業では read/query を促し、write/edit/delete は明示的な依頼または memory maintenance worker に寄せる。
## 完了条件
- `resources/prompts/default.md` から memory guidance が render される。
- prompt render / catalog 関連 test があれば更新されている。
- internal worker prompt には不要な memory guidance が混ざらない。
- `cargo fmt --check` と関連 test が通る。
## 範囲外
- `summary.md` resident injection の実装。これは `memory-summary-resident-injection.md` で扱う。
- memory tool descriptions の大幅変更。
- memory usage metrics の設計変更。
- global memory / project local memory の store 分離。
---
-43
View File
@@ -1,43 +0,0 @@
---
title: "Permission: allow-all 既定 policy への整理"
state: "planning"
created_at: "2026-05-27T00:00:06Z"
updated_at: "2026-05-27T00:00:06Z"
---
## Migration reference
- legacy_ticket: tickets/permission-default-policy.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Permission: allow-all 既定 policy への整理
## 背景
現在の tool permission は `[permissions]` セクションが無い場合に permission 層を無効化し、`[permissions]` がある場合だけ `default_action` を必須としている。
実行時の意味として、未指定時の挙動はほぼ `default_action = "allow"` と同じであり、`Option<ToolPermissionConfig>` による「無効」と allow-all policy が型上で分かれていることが仕様理解と実装の分岐を増やしている。
## 要件
- resolved manifest の permission は常に policy として存在する形に整理する。
- 既定 policy は allow-all とし、`default_action = "allow"` かつ rule なしと同等にする。
- manifest に `[permissions]` が無い既存ユーザー設定は従来通り全ツール実行可能にする。
- `default_action = "deny"` による allowlist 型運用と、`default_action = "allow"` + deny rule による blocklist 型運用を明確に維持する。
- merge/parse 用の partial config では、「その層が permissions に触れていない」ことを表現できるようにする。
## 方針
`PodManifest` のような resolve 後の型では `permissions: ToolPermissionConfig` を持ち、`ToolPermissionConfig::default()` を allow-all とする。
`PodManifestConfig` / partial 側では階層 manifest の merge semantics のために `Option<PermissionConfigPartial>` を残してよい。resolve 時に未指定を allow-all default policy へ畳み込む。
`[permissions]` セクションを書いた場合の `default_action` 必須制約は見直す。rule だけを書いた場合は `default_action = "allow"` と解釈できるようにするか、明示必須を維持する場合でも resolved 型上は allow-all default と矛盾しない形にする。
## 完了条件
- resolve 後の manifest から permission policy の `Option` が消えている。
- `[permissions]` 未指定時に allow-all policy が得られる。
- permission rule 評価と Pod への built-in hook 登録が、常在 policy 前提で単純化されている。
- manifest resolve / merge / permission hook のテストが新しい既定値をカバーしている。
- docs の `[permissions]` 説明が allow-all 既定であることを明記している。
-7
View File
@@ -1,7 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:06Z -->
## Migrated
Migrated from tickets/permission-default-policy.md. No legacy review file was present at migration time.
---
-69
View File
@@ -1,69 +0,0 @@
---
title: "Inbound PodEvent ハンドリングの重複を統合する"
state: "closed"
created_at: "2026-05-27T00:00:07Z"
updated_at: "2026-05-30T05:37:00Z"
---
## Migration reference
- legacy_ticket: tickets/pod-inbound-pod-event-dedup.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Inbound PodEvent ハンドリングの重複を統合する
## 背景
子 Pod から `Method::PodEvent(event)` を受けたときの処理が `controller_loop` と `drive_turn` の 2 箇所にコピーされている。
`controller.rs:693-720`(idle / paused 中):
```rust
Method::PodEvent(event) => {
crate::ipc::event::apply_event_side_effects(
&event, &spawned_registry, &spawner_name, &self_parent_socket,
).await;
pod.push_pod_event_notify(event);
if shared_state.get_status() == PodStatus::Idle {
pending = Some(PendingRun::RunForNotification);
}
}
```
`controller.rs:861-879`(in-flight turn 中):
```rust
Some(Method::PodEvent(event)) => {
let self_parent_socket = parent_socket.cloned();
crate::ipc::event::apply_event_side_effects(
&event, spawned_registry, self_name, &self_parent_socket,
).await;
notify_buffer.push_pod_event(event);
}
```
差分は 2 点:
1. **buffer への push 経路**: `pod.push_pod_event_notify(event)` vs `notify_buffer.push_pod_event(event)`。両者は同じ `NotifyBuffer` を叩く(`pod.rs:845-846` は `self.pending_notifies.push_pod_event(event)` を呼ぶだけで、`notify_buffer_handle()` はその `pending_notifies.clone()` を返す)。**完全に等価**。
2. **auto-kick**: idle 経路だけ `PendingRun::RunForNotification` を stage する。in-flight 経路は in-flight 自体が消化するので不要。
つまり「event の処理本体」(side-effects + notify buffer への push)は同一で、後段の auto-kick だけが state-dependent な分岐。にもかかわらず関数化されておらず、片方をいじってもう片方を忘れると挙動が割れる。
## 要件
- side-effects 適用 + NotifyBuffer への typed push の流れを単一関数 `handle_inbound_pod_event` に切り出す。
- `controller_loop` / `drive_turn` の両方からこのヘルパーを呼ぶ形に置き換える。
- auto-kick (`PendingRun::RunForNotification` の stage) は呼び出し側の責務として残す。これは Pod のライフサイクル状態に依存した判断で、ヘルパー内には押し込めない。
- 関数シグネチャは引数を最小化する。`event`、`spawned_registry`、`self_name: &str`、`self_parent_socket: &Option<PathBuf>` または `Option<&PathBuf>`、`notify_buffer: &NotifyBuffer` の 5 つで足りる前提。`Pod` への可変参照は不要(`notify_buffer` で代用可能)。
- 動作変化なし。既存の `Method::PodEvent` 挙動(in-flight / idle 両方)が完全に同一で続行すること。
## 完了条件
- `controller.rs` 内に `apply_event_side_effects` 呼び出しが 1 箇所だけ残り、`controller_loop` と `drive_turn` の `Method::PodEvent` アームはどちらも `handle_inbound_pod_event(...)` 呼び出し + idle 経路のみ auto-kick stage、という形になる。
- 既存の inbound PodEvent 関連テスト(特に `apply_event_side_effects` の idempotency や `notify_buffer` への typed push)が通る。
## 範囲外
- `apply_event_side_effects` 自体の中身変更。
- `NotifyBuffer` API のリネーム / 統合。
- `pod.push_pod_event_notify` の削除([[pod-interrupt-prep-internalize]] と同じく将来の整理対象だが、本チケットでは外向き API は触らない)。
-76
View File
@@ -1,76 +0,0 @@
---
id: 20260527-000007-pod-inbound-pod-event-dedup
slug: pod-inbound-pod-event-dedup
title: Inbound PodEvent ハンドリングの重複を統合する
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:07Z
updated_at: 2026-05-30T05:37:00Z
assignee: null
legacy_ticket: tickets/pod-inbound-pod-event-dedup.md
---
## Migration reference
- legacy_ticket: tickets/pod-inbound-pod-event-dedup.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Inbound PodEvent ハンドリングの重複を統合する
## 背景
子 Pod から `Method::PodEvent(event)` を受けたときの処理が `controller_loop` と `drive_turn` の 2 箇所にコピーされている。
`controller.rs:693-720`(idle / paused 中):
```rust
Method::PodEvent(event) => {
crate::ipc::event::apply_event_side_effects(
&event, &spawned_registry, &spawner_name, &self_parent_socket,
).await;
pod.push_pod_event_notify(event);
if shared_state.get_status() == PodStatus::Idle {
pending = Some(PendingRun::RunForNotification);
}
}
```
`controller.rs:861-879`(in-flight turn 中):
```rust
Some(Method::PodEvent(event)) => {
let self_parent_socket = parent_socket.cloned();
crate::ipc::event::apply_event_side_effects(
&event, spawned_registry, self_name, &self_parent_socket,
).await;
notify_buffer.push_pod_event(event);
}
```
差分は 2 点:
1. **buffer への push 経路**: `pod.push_pod_event_notify(event)` vs `notify_buffer.push_pod_event(event)`。両者は同じ `NotifyBuffer` を叩く(`pod.rs:845-846` は `self.pending_notifies.push_pod_event(event)` を呼ぶだけで、`notify_buffer_handle()` はその `pending_notifies.clone()` を返す)。**完全に等価**。
2. **auto-kick**: idle 経路だけ `PendingRun::RunForNotification` を stage する。in-flight 経路は in-flight 自体が消化するので不要。
つまり「event の処理本体」(side-effects + notify buffer への push)は同一で、後段の auto-kick だけが state-dependent な分岐。にもかかわらず関数化されておらず、片方をいじってもう片方を忘れると挙動が割れる。
## 要件
- side-effects 適用 + NotifyBuffer への typed push の流れを単一関数 `handle_inbound_pod_event` に切り出す。
- `controller_loop` / `drive_turn` の両方からこのヘルパーを呼ぶ形に置き換える。
- auto-kick (`PendingRun::RunForNotification` の stage) は呼び出し側の責務として残す。これは Pod のライフサイクル状態に依存した判断で、ヘルパー内には押し込めない。
- 関数シグネチャは引数を最小化する。`event`、`spawned_registry`、`self_name: &str`、`self_parent_socket: &Option<PathBuf>` または `Option<&PathBuf>`、`notify_buffer: &NotifyBuffer` の 5 つで足りる前提。`Pod` への可変参照は不要(`notify_buffer` で代用可能)。
- 動作変化なし。既存の `Method::PodEvent` 挙動(in-flight / idle 両方)が完全に同一で続行すること。
## 完了条件
- `controller.rs` 内に `apply_event_side_effects` 呼び出しが 1 箇所だけ残り、`controller_loop` と `drive_turn` の `Method::PodEvent` アームはどちらも `handle_inbound_pod_event(...)` 呼び出し + idle 経路のみ auto-kick stage、という形になる。
- 既存の inbound PodEvent 関連テスト(特に `apply_event_side_effects` の idempotency や `notify_buffer` への typed push)が通る。
## 範囲外
- `apply_event_side_effects` 自体の中身変更。
- `NotifyBuffer` API のリネーム / 統合。
- `pod.push_pod_event_notify` の削除([[pod-interrupt-prep-internalize]] と同じく将来の整理対象だが、本チケットでは外向き API は触らない)。
-91
View File
@@ -1,91 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:07Z -->
## Migrated
Migrated from tickets/pod-inbound-pod-event-dedup.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-30T05:37:00Z status: closed -->
## Closed
---
id: 20260527-000007-pod-inbound-pod-event-dedup
slug: pod-inbound-pod-event-dedup
title: Inbound PodEvent ハンドリングの重複を統合する
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:07Z
updated_at: 2026-05-30T05:37:00Z
assignee: null
legacy_ticket: tickets/pod-inbound-pod-event-dedup.md
---
## Migration reference
- legacy_ticket: tickets/pod-inbound-pod-event-dedup.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Inbound PodEvent ハンドリングの重複を統合する
## 背景
子 Pod から `Method::PodEvent(event)` を受けたときの処理が `controller_loop` と `drive_turn` の 2 箇所にコピーされている。
`controller.rs:693-720`(idle / paused 中):
```rust
Method::PodEvent(event) => {
crate::ipc::event::apply_event_side_effects(
&event, &spawned_registry, &spawner_name, &self_parent_socket,
).await;
pod.push_pod_event_notify(event);
if shared_state.get_status() == PodStatus::Idle {
pending = Some(PendingRun::RunForNotification);
}
}
```
`controller.rs:861-879`(in-flight turn 中):
```rust
Some(Method::PodEvent(event)) => {
let self_parent_socket = parent_socket.cloned();
crate::ipc::event::apply_event_side_effects(
&event, spawned_registry, self_name, &self_parent_socket,
).await;
notify_buffer.push_pod_event(event);
}
```
差分は 2 点:
1. **buffer への push 経路**: `pod.push_pod_event_notify(event)` vs `notify_buffer.push_pod_event(event)`。両者は同じ `NotifyBuffer` を叩く(`pod.rs:845-846` は `self.pending_notifies.push_pod_event(event)` を呼ぶだけで、`notify_buffer_handle()` はその `pending_notifies.clone()` を返す)。**完全に等価**。
2. **auto-kick**: idle 経路だけ `PendingRun::RunForNotification` を stage する。in-flight 経路は in-flight 自体が消化するので不要。
つまり「event の処理本体」(side-effects + notify buffer への push)は同一で、後段の auto-kick だけが state-dependent な分岐。にもかかわらず関数化されておらず、片方をいじってもう片方を忘れると挙動が割れる。
## 要件
- side-effects 適用 + NotifyBuffer への typed push の流れを単一関数 `handle_inbound_pod_event` に切り出す。
- `controller_loop` / `drive_turn` の両方からこのヘルパーを呼ぶ形に置き換える。
- auto-kick (`PendingRun::RunForNotification` の stage) は呼び出し側の責務として残す。これは Pod のライフサイクル状態に依存した判断で、ヘルパー内には押し込めない。
- 関数シグネチャは引数を最小化する。`event`、`spawned_registry`、`self_name: &str`、`self_parent_socket: &Option<PathBuf>` または `Option<&PathBuf>`、`notify_buffer: &NotifyBuffer` の 5 つで足りる前提。`Pod` への可変参照は不要(`notify_buffer` で代用可能)。
- 動作変化なし。既存の `Method::PodEvent` 挙動(in-flight / idle 両方)が完全に同一で続行すること。
## 完了条件
- `controller.rs` 内に `apply_event_side_effects` 呼び出しが 1 箇所だけ残り、`controller_loop` と `drive_turn` の `Method::PodEvent` アームはどちらも `handle_inbound_pod_event(...)` 呼び出し + idle 経路のみ auto-kick stage、という形になる。
- 既存の inbound PodEvent 関連テスト(特に `apply_event_side_effects` の idempotency や `notify_buffer` への typed push)が通る。
## 範囲外
- `apply_event_side_effects` 自体の中身変更。
- `NotifyBuffer` API のリネーム / 統合。
- `pod.push_pod_event_notify` の削除([[pod-interrupt-prep-internalize]] と同じく将来の整理対象だが、本チケットでは外向き API は触らない)。
---
-69
View File
@@ -1,69 +0,0 @@
---
title: "Pod: scope 永続化 authority の整理"
state: "closed"
created_at: "2026-05-27T00:00:08Z"
updated_at: "2026-05-30T05:57:16Z"
---
## Migration reference
- legacy_ticket: tickets/pod-scope-persistence-authority.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Pod: scope 永続化 authority の整理
## 背景
Pod の scope は複数の場所に関連情報が存在している。
- session log の `pod.scope` extension: Pod 自身の復元用 runtime scope snapshot
- Pod metadata: Pod 名から active session/segment への pointer と spawned child 情報
- spawned child 情報: child に委譲した scope
- runtime registry: live Pod の allocation / conflict detection 用 scope
- runtime mirror: `spawned_pods.json` 等の現在プロセス向け表示・制御用情報
これらは用途が異なるが、どの情報が durable authority で、どれが live mirror / derived state なのかが読み取りづらい。特に restore、compact/fork による segment 切替、child scope の委譲・reclaim、runtime registry の再構築で、scope の保存先と復元順序が曖昧だと権限の過大復元または過小復元につながる。
## 要件
- Pod scope に関する durable authority を明確に定義する。
- Pod 自身の base scope / effective runtime scope / deny による delegated-out 部分を区別する。
- spawned child に委譲した scope と、親 Pod 自身の effective scope を区別する。
- live registry / runtime mirror は durable authority ではないことを明確にする。
- Pod 名からの restore に必要な情報の保存先を一貫させる。
- Pod 名から active session/segment を解決できる。
- 解決した Pod が、前回終了時点の effective scope を過大に復元しない。
- child が生存・復元対象の場合、親の delegated-out scope が意図せず reclaim されない。
- segment 遷移で scope が失われない。
- compact / fork / resume / attach の後も、次にその segment を restore したとき同じ effective scope が得られる。
- 新 segment 作成時に scope authority が必要なら、初期状態として確実に引き継がれる。
- spawned child の scope 永続化を親 Pod の restore/reclaim 要件と整合させる。
- 親は child に委譲済みの scope を把握できる。
- child 停止・shutdown・restore 時の prune により、親の effective write scope が正しく reclaim される。
- explicit deny と delegated-out deny を混同しない。
- runtime registry 再構築時の入力と副作用を定義する。
- restore 時にどの durable state から allocation を再作成するかが明確である。
- stale / unreachable child を pruning した場合、durable state と runtime mirror が矛盾しない。
- 保存形式は inspect/debug しやすい。
- Pod ごとに「active pointer」「自身の scope」「spawned child と delegated scope」が追跡できる。
- restore 失敗時に、欠けている authority が何か分かる error になる。
- session log の conversation/history authority と scope authority の関係を明確にする。
- scope 更新が conversation history の意味内容を汚染しない。
- append-only session log に置く場合は、compact/fork と replay semantics 上の扱いが明示される。
- Pod metadata に置く場合は、session/segment lineage との整合と更新順序が明示される。
## 完了条件
- Pod scope に関する durable authority / runtime mirror / derived state の責務がコードとドキュメント上で一致している。
- Pod restore が、前回の effective scope を過大復元しない regression test を持つ。
- compact または fork 後の新 segment restore で scope が失われない regression test を持つ。
- spawned child に scope 委譲済みの親 Pod を restore しても、child 側の write scope が親に二重に戻らない regression test を持つ。
- child 停止・shutdown・restore pruning 後に、親の effective scope と durable state が一致する regression test を持つ。
- runtime registry / runtime mirror が durable authority と矛盾した場合の扱いが test で確認されている。
## 範囲外
- manifest scope 設定そのものの設計変更。
- tool permission policy の allow / ask / deny 挙動変更。
- UI 表示だけで scope 不整合を隠す対応。
- 既存の壊れた手元 session log を自動修復する migration。
-3
View File
@@ -1,3 +0,0 @@
後続の `session-pod-state-boundary` / `pod-store` / spawned registry work により、scope authority の主設計と restore/reclaim 実装は吸収済み。
残る小粒な責務重複は `KNOWN_ISSUES.md` に移したため、この migrated ticket は superseded として閉じる。
-17
View File
@@ -1,17 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:08Z -->
## Migrated
Migrated from tickets/pod-scope-persistence-authority.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-30T05:57:16Z status: closed -->
## Closed
後続の `session-pod-state-boundary` / `pod-store` / spawned registry work により、scope authority の主設計と restore/reclaim 実装は吸収済み。
残る小粒な責務重複は `KNOWN_ISSUES.md` に移したため、この migrated ticket は superseded として閉じる。
---
-68
View File
@@ -1,68 +0,0 @@
---
title: "Pod: 任意ターンからの Fork(複数ターン巻き戻し)"
state: 'closed'
created_at: "2026-05-27T00:00:09Z"
updated_at: '2026-06-20T16:31:29Z'
---
## Migration reference
- legacy_ticket: tickets/pod-session-fork.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Pod: 任意ターンからの Fork(複数ターン巻き戻し)
## 背景
`tickets/pod-empty-turn-rollback.md` は「直近 Submit が AI 応答ゼロのまま中断された」極めて狭いケースだけを自動で巻き戻す簡易フォーム。それを超える「3 ターン前から別の方針でやり直したい」「ある分岐は捨てて別ルートを試したい」といった **複数ターン巻き戻し** は、過去ターン境界からの Fork として実装する。
session_store には既に primitive が揃っている:
- `session::fork(state)` — 現状から新 session_id へ分岐(`crates/session-store/src/session.rs:400`)
- `session::fork_at(source_id, at_hash)` — 既存セッションログ上の任意 entry hash から分岐(同 :424)
- `SessionOrigin { session_id, at_hash }` — `SessionStart.forked_from` に出自を記録
未着手なのは Pod / protocol / クライアントへの露出と、ターン境界 ↔ entry hash の対応付け。
## 要件
- Pod に「現セッションから Fork して新セッションへ切り替える」操作を追加。Fork 起点はターン境界で指定する:
- protocol に新 Method(仮: `Method::Fork { from: ForkPoint }`)を追加
- `ForkPoint` は最低限「ターン番号」「entry hash」のいずれかで起点を指す
- ターン番号 → entry hash の解決は Pod / session_store 側で行う(`save_turn_end` のログ entry を境界として使うのが自然)
- Fork 後の Pod 状態:
- 新 session_id を active に切り替え、worker.history を fork 起点までの内容で再構築
- 元セッションは破壊されない(後から switch back 可能な前提を残す)
- 走行中(Running / Paused)状態での Fork は拒否し、Idle 限定
- Fork ツリーが追跡可能であること:
- `forked_from` chain が session_store のログから辿れる(既存挙動の確認込み)
- クライアントから「このセッションの祖先 / 子孫」を引ける API(最低限、`SessionOrigin` を読める形)
- pod_cli / TUI からの呼び出しインターフェースの設計:
- 本チケットで protocol 上の Method は確定させる
- pod_cli の引数仕様もここに含める(最低限 `pod fork --turn N` 程度)
- TUI 側の UX(ターンを選択して fork する操作)は別チケット
- セッション切り替え後の `runtime_dir` の扱いを decide:
- 1 つの runtime に対して active session が切り替わる形
- セッションごとに別 runtime を持つ形
- のどちらが今の構成と整合するか調査の上で決定
## 完了条件
- `Method::Fork` で過去ターン起点の新セッションが作成され、そこから `Method::Run` で続行できる
- 元セッションが fork 後も独立に存在し、別 Pod プロセスから resume できる(破壊されていない)
- Fork ツリーが session_store のログから機械的に辿れる
- pod_cli から fork → 新セッションでの run まで通せる
- `pod-empty-turn-rollback` の自動巻き戻しと共存(自動巻き戻しは本機能を使わずに従来通りの直接 truncate 方式で良い、と決めるならその根拠も明記)
## 範囲外
- Fork ツリーの可視化 UI(TUI / GUI)— 別チケット
- TUI 上での「ターンを選んで fork」UX — 別チケット
- 異なる Fork 間でのマージ
- 過去ターンの物理削除型リベース(fork は常に非破壊)
- 自動 GC / 古い fork の整理
## 依存 / 関連
- `tickets/pod-empty-turn-rollback.md`(直近 Submit のみの自動巻き戻し。本チケットは汎用 fork)
- session_store の既存 `fork` / `fork_at` を流用
-1
View File
@@ -1 +0,0 @@
Closed as no longer needed. Arbitrary-turn Pod/session fork and multi-turn rewind are not part of the current desired workflow; current restore/rewind/fork behavior is sufficient for active use, and future history editing should be reopened as a narrower current-runtime design if needed.
-25
View File
@@ -1,25 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:09Z -->
## Migrated
Migrated from tickets/pod-session-fork.md. No legacy review file was present at migration time.
---
<!-- event: state_changed author: hare at: 2026-06-20T16:31:28Z from: planning to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-20T16:31:29Z status: closed -->
## 完了
Closed as no longer needed. Arbitrary-turn Pod/session fork and multi-turn rewind are not part of the current desired workflow; current restore/rewind/fork behavior is sufficient for active use, and future history editing should be reopened as a narrower current-runtime design if needed.
---
-159
View File
@@ -1,159 +0,0 @@
---
title: "Prompt / Workflow 評価メトリクスと改善 Offer"
state: 'closed'
created_at: "2026-05-27T00:00:10Z"
updated_at: '2026-06-20T16:31:29Z'
---
## Migration reference
- legacy_ticket: tickets/prompt-eval-metrics.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Prompt / Workflow 評価メトリクスと改善 Offer
## 背景
empirical prompt tuning pattern は、agent-facing な指示(Skill / slash command / prompt 等)を新規 subagent に実行させ、実行者の自己申告と指示側メトリクスを突き合わせて反復改善する手法である。insomnia では Workflow / Skill ingest / Knowledge / memory consolidation / usage metrics / Pod orchestration があるため、この手法を単なる「手順」ではなく、**agent-facing instruction の品質観測 pipeline** として扱える。
特に insomnia では以下をシステム側で観測できる。
- evaluator Pod の session id / history
- tool call / tool result
- usage tokens
- workflow / knowledge の明示使用ログ(use 回数、last used、source breakdown。`tickets/memory-usage-metrics.md`)
- `model_invokation` 常駐注入の exposure cost 指標
- extract / consolidation による recurring pattern 抽出
- Workflow 自動書き込み禁止に基づく improvement offer
したがって、`/empirical-prompt-tuning` 相当の Workflow は、評価実行を orchestration するだけでなく、評価結果を構造化 event として残し、将来的に memory consolidation / usage metrics / Workflow improvement offer / `model_invokation` 判断へ接続するべきである。
## 要件
### `/empirical-prompt-tuning` Workflow
`.insomnia/workflow/empirical-prompt-tuning.md` を追加し、Workflow / Skill / prompt / Knowledge を評価対象として扱える手順を用意する。
Workflow は少なくとも以下を明示する。
- 評価対象 target の固定
- kind: workflow / skill / prompt / knowledge
- slug または path
- git revision または content hash
- Iteration 0: description / body consistency check
- scenario set の作成
- median 1 件
- edge 1〜2 件
- requirements checklist 3〜7 項目
- `[critical]` 項目を最低 1 つ含める
- evaluator Pod は毎回新規に spawn し、同じ evaluator を再利用しない
- evaluator Pod は実装者ではなく評価者として動く
- evaluator report は以下の構造にする
- Deliverable
- Requirement achievement
- Trace: Understanding / Planning / Execution / Formatting
- Unclear points: Issue / Cause / General Fix Rule
- Discretionary fill-ins
- Retries
- 1 iteration 1 theme の最小修正を原則とする
- Workflow / prompt の実ファイル書き換えは人間承認後に限る
- Workflow 自動生成 / 自動更新は禁止し、必要な改善は offer として人間に戻す
### 評価 event schema
評価結果を、将来の system metrics / memory consolidation に流せる構造化 event として定義する。
最低限の field:
```text
eval_run_id
target_kind
target_slug_or_path
target_revision_or_hash
scenario_id
scenario_kind: median | edge | holdout
evaluator_pod_name
evaluator_session_id
started_at / ended_at
success: bool
accuracy: number
critical_passed: bool
tool_call_count
tool_call_count_by_tool
input_tokens
output_tokens
cache_read_tokens / cache_write_tokens if available
scope_error_count
file_search_count
escalation_count
unclear_points[]
phase: Understanding | Planning | Execution | Formatting
issue
cause
general_fix_rule
discretionary_fill_ins[]
retries
```
初期実装で全 field が機械取得できない場合は、取得可能なものと evaluator self-report 由来のものを分ける。未取得 field は空にしてよいが、schema 上は将来埋められる形にする。
### Metrics / memory consolidation との接続
本チケットでは、評価 event を memory / metrics pipeline に接続する設計を明文化し、可能な最小実装を入れる。
接続方針:
- evaluator self-report は consolidation extract の活動抽出対象になる
- repeated `General Fix Rule` は consolidation が recurring failure pattern として統合できる
- recurring pattern は即 Knowledge 化せず、明示使用ログと Doctor / prompt-eval の事後評価を通す
- Workflow 改善は `.insomnia/workflow/*.md` へ自動書き込みせず、Notification / report / ticket などの offer に留める
- `model_invokation` ON 判断では、明示使用ログと resident exposure cost に加えて、eval success rate / unclear point count / description-body consistency を判断材料にする
### 評価指標の解釈
Claude Code 版の `tool_uses` を、insomnia では tool 種別ごとの偏りとして解釈する。
例:
- Glob / Grep が突出: references / 探索方針が prompt 内で弱い
- Read が突出: required context の入口が弱い
- scope error が出る: permission / worktree / escalation 境界が弱い
- SpawnPod / SendToPod が多い: orchestration の粒度や子 Pod 指示が曖昧
- ticket / git write に向かう: escalation criteria が弱い
定量指標は補助であり、Unclear points / Discretionary fill-ins / General Fix Rule を主指標とする。
### Failure pattern ledger
手書き台帳だけにせず、eval event から抽出可能な failure pattern として扱う。
- `General Fix Rule` を class-level pattern として正規化する
- 同じ pattern が複数 scenario / 複数 iteration / 複数 target で再発した場合、consolidation が decision / knowledge candidate / workflow improvement offer に統合できる
- 同じ pattern が 3 回以上再発した場合、局所 patch ではなく target prompt の構造変更を提案する
## 範囲外
- Workflow の自動書き換え
- Knowledge の即時自動作成
- `model_invokation` ON/OFF の完全自動切替
- evaluator Pod の永続ジョブキュー化
- prompt DSL 化
- LLM judge による主観的 A/B 比較の採用
- すべての metrics field の初期実装での完全自動取得
## 完了条件
- `.insomnia/workflow/empirical-prompt-tuning.md` が追加され、insomnia の evaluator Pod / metrics / memory consolidation 前提で記述されている
- Workflow は Iteration 0、scenario checklist、Trace、Issue / Cause / General Fix Rule、1 iteration 1 theme、人間承認 gate を明示している
- 評価 event schema が docs または ticket 内で定義されている
- eval event を memory consolidation / usage metrics / Workflow improvement offer / `model_invokation` 判断へ接続する方針が文書化されている
- 既存の Workflow 自動生成禁止・history に commit されない context input 禁止・memory consolidation 方針に反していない
- `ticket-intake-workflow` / `ticket-orchestrator-routing` / `worktree-workflow` のいずれか 1 件を対象に、構造審査または小規模 evaluator Pod 試走を行い、結果を記録している
## 参照
- empirical prompt tuning skill example(外部参照。取り込み時は必要最小限に一般化する)
- `docs/plan/workflow.md`
- `docs/plan/memory.md`
- `tickets/memory-usage-metrics.md`
- `ticket-intake-workflow.md` / `ticket-orchestrator-routing.md`
-1
View File
@@ -1 +0,0 @@
Closed as superseded/no longer needed. Workflow evaluation metrics and improvement planning have moved under the newer Memory redesign / team-workspace memory objectives, so this old prompt/workflow metrics ticket should not remain as a standalone planning item.
-25
View File
@@ -1,25 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:10Z -->
## Migrated
Migrated from tickets/prompt-eval-metrics.md. No legacy review file was present at migration time.
---
<!-- event: state_changed author: hare at: 2026-06-20T16:31:29Z from: planning to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-20T16:31:29Z status: closed -->
## 完了
Closed as superseded/no longer needed. Workflow evaluation metrics and improvement planning have moved under the newer Memory redesign / team-workspace memory objectives, so this old prompt/workflow metrics ticket should not remain as a standalone planning item.
---
-73
View File
@@ -1,73 +0,0 @@
---
title: "セッション内 Task ツールの注意機構"
state: "closed"
created_at: "2026-05-27T00:00:11Z"
updated_at: "2026-05-29T04:31:10Z"
---
## Migration reference
- legacy_ticket: tickets/session-todo-reminder.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# セッション内 Task ツールの注意機構
## 背景
`tickets/session-todo.md` で導入した Task ツール群があっても、LLM はそれを使わずに作業を続け得る。ツールを呼ばないまま会話が長引くと、
- 開始した作業の `inprogress` がずっと放置されたままになる
- 「やったつもり」になって `completed` への更新を忘れる
- そもそも TaskStore の存在を忘れて、構造化を諦めて自由記述に回帰する
OpenCode の todo は専用の注意機構を持たない(汎用 reminder 経由)。一方、一部の既存エージェント実装では todo reminder を「N リクエスト無アクティビティで初めて発火するナッジ型」として扱い、毎リクエスト押し戻しはしない。
Insomnia でも同方針を採り、active Task が残っているのに `TaskCreate` / `TaskUpdate` が一定リクエスト呼ばれていない場合に限り、`<system-reminder>` Item を 1件 history に append する。「やったつもり」抑止と、トークン浪費・LLM の自律性侵害のバランスを取るため、毎リクエスト押し戻しはしない。
## 前提
- `tickets/session-todo.md` の TaskStore と `TaskCreate` / `TaskUpdate` / `TaskList` / `TaskGet` ツールが利用可能
- `Interceptor::pending_history_appends` レーンが利用可能(`tickets/notify-history-persist.md` で導入済み)
## 方針
- **`pending_history_appends` で実装**。発火時に `<system-reminder>` ブロックを含む新規 system message Item を返し、Worker が `worker.history` に append する。Notify / PodEvent と同じレーンで永続化・resume・compaction が自動で揃う
- **揮発的注入は採らない**(`AGENTS.md` 「LLM コンテキストの加工原則」で禁止。history に commit せずに context を変えると、resume 時に LLM の発言の根拠が再現できなくなる)
- **system-reminder 注入機構の汎用化はやらない**。利用者が Task 1機構しかない段階で抽象を立てない(`AGENTS.md`「概念の追加は不在が問題になってから」)。タグ形式 `<system-reminder>...</system-reminder>` の規約は本実装で踏襲する
- **発火はナッジ型**。N リクエスト無アクティビティで初めて発火し、cooldown も持つ
## 要件
### Interceptor
- `pending_history_appends` で以下を **AND** で満たす場合のみ発動し、`<system-reminder>` ブロックを含む `Item::system_message` を 1件返す。条件外なら空 `Vec<Item>` を返す
- active Task(`pending` または `inprogress`)が 1件以上存在する
- 直近 N リクエスト(暫定 N=8)`TaskCreate` / `TaskUpdate` のいずれも呼ばれていない
- 前回 reminder Item の append から M リクエスト(暫定 M=8)以上経過
- ここで言う「リクエスト」は LLM への 1回の推論呼び出し(assistant 応答 1回)の単位。1ユーザー発火内で tool ループが回れば、`tool_result` を受けて発火する次のリクエストもそれぞれ 1としてカウントする
- カウンタは Pod 側の session-lifetime 状態として保持する(`requests_since_last_task_management` / `requests_since_last_reminder`)。resume 時は worker.history の逆走査で再計算するか 0 リセットで再開する。後者でも「初回ナッジが最大 N リクエスト遅れる」だけで挙動として致命ではない
- 返す Item の本文は `<system-reminder>` で囲み、現在の active Task を `taskid` / `status` / `subject` を含む簡潔な形式で列挙する。`description` は長大化を避けるため省略してよい
- active Task が空の場合は何も append しない(思い出させる対象が無いなら不要)
## 完了条件
- 直近 N リクエスト連続で `TaskCreate` / `TaskUpdate` が呼ばれず、かつ active Task が残っている場合に限り、`pending_history_appends` が `<system-reminder>` を含む `Item::system_message` を 1件返す
- 返された Item が `worker.history` に append され、その後のリクエスト・`history.json`・resume 後の `get_history` でも同じ Item が見える(揮発レーンは持たない)
- `TaskCreate` / `TaskUpdate` のいずれかが呼ばれるとカウンタがリセットされ、再び N リクエスト経過するまでは reminder が出ない
- reminder が一度出たあとは、cooldown M リクエストが経過するまで再注入されない
- active Task が 0件の場合は reminder が出ない
- 単体テストで Interceptor の発火条件(リクエスト回数閾値、active 0件、cooldown)がカバーされる
## 範囲外
- inprogress 滞留検出 / 多重 inprogress 検出など、状態異常ベースの追加トリガ(必要になれば別チケットで追加)
- system-reminder 注入機構の汎用化(`TODO.md` に立項済み、別途検討)
- `TaskCreate` / `TaskUpdate` の戻り値に active Task 全件を埋め込む強化(必要に応じて Tool ticket 側で対応)
- サブエージェント / sidechain での独自 reminder 発火(main Pod の interceptor から動く構造のため自然に対象外)
## 参照
- 設計指針: `AGENTS.md`(LLM コンテキストの加工原則。揮発的注入は禁止、history に append してから commit する)
- 前提: `tickets/session-todo.md`(Tool 群と TaskStore)、`tickets/notify-history-persist.md`(`pending_history_appends` レーン)
- 参考: 一部エージェント実装の todo reminder は、一定リクエスト無アクティビティ後に発火し、再通知にも cooldown を置くナッジ型として扱われている
-80
View File
@@ -1,80 +0,0 @@
---
id: 20260527-000011-session-todo-reminder
slug: session-todo-reminder
title: セッション内 Task ツールの注意機構
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:11Z
updated_at: 2026-05-29T04:31:10Z
assignee: null
legacy_ticket: tickets/session-todo-reminder.md
---
## Migration reference
- legacy_ticket: tickets/session-todo-reminder.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# セッション内 Task ツールの注意機構
## 背景
`tickets/session-todo.md` で導入した Task ツール群があっても、LLM はそれを使わずに作業を続け得る。ツールを呼ばないまま会話が長引くと、
- 開始した作業の `inprogress` がずっと放置されたままになる
- 「やったつもり」になって `completed` への更新を忘れる
- そもそも TaskStore の存在を忘れて、構造化を諦めて自由記述に回帰する
OpenCode の todo は専用の注意機構を持たない(汎用 reminder 経由)。一方、一部の既存エージェント実装では todo reminder を「N リクエスト無アクティビティで初めて発火するナッジ型」として扱い、毎リクエスト押し戻しはしない。
Insomnia でも同方針を採り、active Task が残っているのに `TaskCreate` / `TaskUpdate` が一定リクエスト呼ばれていない場合に限り、`<system-reminder>` Item を 1件 history に append する。「やったつもり」抑止と、トークン浪費・LLM の自律性侵害のバランスを取るため、毎リクエスト押し戻しはしない。
## 前提
- `tickets/session-todo.md` の TaskStore と `TaskCreate` / `TaskUpdate` / `TaskList` / `TaskGet` ツールが利用可能
- `Interceptor::pending_history_appends` レーンが利用可能(`tickets/notify-history-persist.md` で導入済み)
## 方針
- **`pending_history_appends` で実装**。発火時に `<system-reminder>` ブロックを含む新規 system message Item を返し、Worker が `worker.history` に append する。Notify / PodEvent と同じレーンで永続化・resume・compaction が自動で揃う
- **揮発的注入は採らない**(`AGENTS.md` 「LLM コンテキストの加工原則」で禁止。history に commit せずに context を変えると、resume 時に LLM の発言の根拠が再現できなくなる)
- **system-reminder 注入機構の汎用化はやらない**。利用者が Task 1機構しかない段階で抽象を立てない(`AGENTS.md`「概念の追加は不在が問題になってから」)。タグ形式 `<system-reminder>...</system-reminder>` の規約は本実装で踏襲する
- **発火はナッジ型**。N リクエスト無アクティビティで初めて発火し、cooldown も持つ
## 要件
### Interceptor
- `pending_history_appends` で以下を **AND** で満たす場合のみ発動し、`<system-reminder>` ブロックを含む `Item::system_message` を 1件返す。条件外なら空 `Vec<Item>` を返す
- active Task(`pending` または `inprogress`)が 1件以上存在する
- 直近 N リクエスト(暫定 N=8)`TaskCreate` / `TaskUpdate` のいずれも呼ばれていない
- 前回 reminder Item の append から M リクエスト(暫定 M=8)以上経過
- ここで言う「リクエスト」は LLM への 1回の推論呼び出し(assistant 応答 1回)の単位。1ユーザー発火内で tool ループが回れば、`tool_result` を受けて発火する次のリクエストもそれぞれ 1としてカウントする
- カウンタは Pod 側の session-lifetime 状態として保持する(`requests_since_last_task_management` / `requests_since_last_reminder`)。resume 時は worker.history の逆走査で再計算するか 0 リセットで再開する。後者でも「初回ナッジが最大 N リクエスト遅れる」だけで挙動として致命ではない
- 返す Item の本文は `<system-reminder>` で囲み、現在の active Task を `taskid` / `status` / `subject` を含む簡潔な形式で列挙する。`description` は長大化を避けるため省略してよい
- active Task が空の場合は何も append しない(思い出させる対象が無いなら不要)
## 完了条件
- 直近 N リクエスト連続で `TaskCreate` / `TaskUpdate` が呼ばれず、かつ active Task が残っている場合に限り、`pending_history_appends` が `<system-reminder>` を含む `Item::system_message` を 1件返す
- 返された Item が `worker.history` に append され、その後のリクエスト・`history.json`・resume 後の `get_history` でも同じ Item が見える(揮発レーンは持たない)
- `TaskCreate` / `TaskUpdate` のいずれかが呼ばれるとカウンタがリセットされ、再び N リクエスト経過するまでは reminder が出ない
- reminder が一度出たあとは、cooldown M リクエストが経過するまで再注入されない
- active Task が 0件の場合は reminder が出ない
- 単体テストで Interceptor の発火条件(リクエスト回数閾値、active 0件、cooldown)がカバーされる
## 範囲外
- inprogress 滞留検出 / 多重 inprogress 検出など、状態異常ベースの追加トリガ(必要になれば別チケットで追加)
- system-reminder 注入機構の汎用化(`TODO.md` に立項済み、別途検討)
- `TaskCreate` / `TaskUpdate` の戻り値に active Task 全件を埋め込む強化(必要に応じて Tool ticket 側で対応)
- サブエージェント / sidechain での独自 reminder 発火(main Pod の interceptor から動く構造のため自然に対象外)
## 参照
- 設計指針: `AGENTS.md`(LLM コンテキストの加工原則。揮発的注入は禁止、history に append してから commit する)
- 前提: `tickets/session-todo.md`(Tool 群と TaskStore)、`tickets/notify-history-persist.md`(`pending_history_appends` レーン)
- 参考: 一部エージェント実装の todo reminder は、一定リクエスト無アクティビティ後に発火し、再通知にも cooldown を置くナッジ型として扱われている
-95
View File
@@ -1,95 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:11Z -->
## Migrated
Migrated from tickets/session-todo-reminder.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-29T04:31:10Z status: closed -->
## Closed
---
id: 20260527-000011-session-todo-reminder
slug: session-todo-reminder
title: セッション内 Task ツールの注意機構
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:11Z
updated_at: 2026-05-29T04:31:10Z
assignee: null
legacy_ticket: tickets/session-todo-reminder.md
---
## Migration reference
- legacy_ticket: tickets/session-todo-reminder.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# セッション内 Task ツールの注意機構
## 背景
`tickets/session-todo.md` で導入した Task ツール群があっても、LLM はそれを使わずに作業を続け得る。ツールを呼ばないまま会話が長引くと、
- 開始した作業の `inprogress` がずっと放置されたままになる
- 「やったつもり」になって `completed` への更新を忘れる
- そもそも TaskStore の存在を忘れて、構造化を諦めて自由記述に回帰する
OpenCode の todo は専用の注意機構を持たない(汎用 reminder 経由)。一方、一部の既存エージェント実装では todo reminder を「N リクエスト無アクティビティで初めて発火するナッジ型」として扱い、毎リクエスト押し戻しはしない。
Insomnia でも同方針を採り、active Task が残っているのに `TaskCreate` / `TaskUpdate` が一定リクエスト呼ばれていない場合に限り、`<system-reminder>` Item を 1件 history に append する。「やったつもり」抑止と、トークン浪費・LLM の自律性侵害のバランスを取るため、毎リクエスト押し戻しはしない。
## 前提
- `tickets/session-todo.md` の TaskStore と `TaskCreate` / `TaskUpdate` / `TaskList` / `TaskGet` ツールが利用可能
- `Interceptor::pending_history_appends` レーンが利用可能(`tickets/notify-history-persist.md` で導入済み)
## 方針
- **`pending_history_appends` で実装**。発火時に `<system-reminder>` ブロックを含む新規 system message Item を返し、Worker が `worker.history` に append する。Notify / PodEvent と同じレーンで永続化・resume・compaction が自動で揃う
- **揮発的注入は採らない**(`AGENTS.md` 「LLM コンテキストの加工原則」で禁止。history に commit せずに context を変えると、resume 時に LLM の発言の根拠が再現できなくなる)
- **system-reminder 注入機構の汎用化はやらない**。利用者が Task 1機構しかない段階で抽象を立てない(`AGENTS.md`「概念の追加は不在が問題になってから」)。タグ形式 `<system-reminder>...</system-reminder>` の規約は本実装で踏襲する
- **発火はナッジ型**。N リクエスト無アクティビティで初めて発火し、cooldown も持つ
## 要件
### Interceptor
- `pending_history_appends` で以下を **AND** で満たす場合のみ発動し、`<system-reminder>` ブロックを含む `Item::system_message` を 1件返す。条件外なら空 `Vec<Item>` を返す
- active Task(`pending` または `inprogress`)が 1件以上存在する
- 直近 N リクエスト(暫定 N=8)`TaskCreate` / `TaskUpdate` のいずれも呼ばれていない
- 前回 reminder Item の append から M リクエスト(暫定 M=8)以上経過
- ここで言う「リクエスト」は LLM への 1回の推論呼び出し(assistant 応答 1回)の単位。1ユーザー発火内で tool ループが回れば、`tool_result` を受けて発火する次のリクエストもそれぞれ 1としてカウントする
- カウンタは Pod 側の session-lifetime 状態として保持する(`requests_since_last_task_management` / `requests_since_last_reminder`)。resume 時は worker.history の逆走査で再計算するか 0 リセットで再開する。後者でも「初回ナッジが最大 N リクエスト遅れる」だけで挙動として致命ではない
- 返す Item の本文は `<system-reminder>` で囲み、現在の active Task を `taskid` / `status` / `subject` を含む簡潔な形式で列挙する。`description` は長大化を避けるため省略してよい
- active Task が空の場合は何も append しない(思い出させる対象が無いなら不要)
## 完了条件
- 直近 N リクエスト連続で `TaskCreate` / `TaskUpdate` が呼ばれず、かつ active Task が残っている場合に限り、`pending_history_appends` が `<system-reminder>` を含む `Item::system_message` を 1件返す
- 返された Item が `worker.history` に append され、その後のリクエスト・`history.json`・resume 後の `get_history` でも同じ Item が見える(揮発レーンは持たない)
- `TaskCreate` / `TaskUpdate` のいずれかが呼ばれるとカウンタがリセットされ、再び N リクエスト経過するまでは reminder が出ない
- reminder が一度出たあとは、cooldown M リクエストが経過するまで再注入されない
- active Task が 0件の場合は reminder が出ない
- 単体テストで Interceptor の発火条件(リクエスト回数閾値、active 0件、cooldown)がカバーされる
## 範囲外
- inprogress 滞留検出 / 多重 inprogress 検出など、状態異常ベースの追加トリガ(必要になれば別チケットで追加)
- system-reminder 注入機構の汎用化(`TODO.md` に立項済み、別途検討)
- `TaskCreate` / `TaskUpdate` の戻り値に active Task 全件を埋め込む強化(必要に応じて Tool ticket 側で対応)
- サブエージェント / sidechain での独自 reminder 発火(main Pod の interceptor から動く構造のため自然に対象外)
## 参照
- 設計指針: `AGENTS.md`(LLM コンテキストの加工原則。揮発的注入は禁止、history に append してから commit する)
- 前提: `tickets/session-todo.md`(Tool 群と TaskStore)、`tickets/notify-history-persist.md`(`pending_history_appends` レーン)
- 参考: 一部エージェント実装の todo reminder は、一定リクエスト無アクティビティ後に発火し、再通知にも cooldown を置くナッジ型として扱われている
---
-77
View File
@@ -1,77 +0,0 @@
---
title: "SpawnPod: initial Run delivery confirmation"
state: "closed"
created_at: "2026-05-27T00:00:12Z"
updated_at: "2026-05-28T13:24:48Z"
---
## Migration reference
- legacy_ticket: tickets/spawnpod-initial-run-confirmation.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# SpawnPod: initial Run delivery confirmation
## 背景
`SpawnPod` は child Pod を起動し、初回 task を `Method::Run` として送る。しかし、実例として `impl-llm-worker-stream-continuation` を再作成した際、runtime registry / socket / process は生きている一方で、初回 task の session log が materialize されず、Pod は `idle` のままだった。
確認された状態:
- `<runtime-dir>/pods.json` に live allocation がある
- `<runtime-dir>/<pod>/status.json` は `state: "idle"` と runtime `segment_id` を持つ
- `<insomnia-sessions>/pods/<pod>/metadata.json` は pending segment のまま
- 対応する session / segment `.jsonl` が存在しない
- `ReadPodOutput` は no new assistant text
`SpawnPod` の送信側は `send_run` で `Method::Run` を write してすぐ切断し、`TurnStart` 等の ack を待っていない。一方 server 側は接続直後に `Snapshot` を書いてから method を読むため、client がすぐ close すると server が snapshot write で失敗し、method を読む前に connection handler が終了する race があり得る。
この場合 `SpawnPod` は成功を返すが、child Pod は初回 task を実行していない。
同種の問題は child Pod の通知経路でも既に踏んでおり、送信側が write 後にすぐ切断せず、receiver 側の acknowledgement / observable event を待つ形にして解消している。`SpawnPod` の初回 task delivery も同じ性質の race と見なす。
追加確認として、Pod socket server は接続直後に replayed `Alert` と connect-time `Snapshot` を送ってから client `Method` を読む。したがって one-shot / send-only client は初期 event を消化してから Method を送る必要がある。
- `send_run_and_confirm` は `Method::Run` を送った後に event を読む実装になっており、Snapshot が大きい場合や Run payload が大きい場合に双方向で詰まる余地がある。
- `connect_and_send` / `fetch_history` は既に Snapshot まで drain / read しており、この系統の問題は対策済み。
- `probe_socket` は最初の event だけを見て `Snapshot` でなければ status を取らないため、replayed `Alert` が先に来る live Pod で reachable だが status unknown になる可能性がある。
- `PodClient::connect` は background reader を起動するため、通常の TUI attach / interactive client では初期 Snapshot を詰まらせにくい。
## 方針
`SpawnPod` は child process / socket の起動だけでなく、初回 task が controller に受理され、少なくとも `UserMessage` または `TurnStart` が観測できるまで確認してから成功を返す。
既存の `SendToPod` / `SpawnPod` が使う run delivery confirmation ロジックを、接続直後の `Alert` / `Snapshot` drain を含む形へ共通化・安全化する。
## 要件
- `SpawnPod` の初回 task 送信は fire-and-forget にしない。
- `Method::Run` 送信後、`UserMessage` / `TurnStart` / `InvokeStart` など、run が受理されたことを示す event を待つ。
- timeout 時は `SpawnPod` を失敗扱いにする。
- 初回 task delivery に失敗した場合、process / registry / delegated scope の扱いを明確にする。
- cleanup するか、attach 可能な idle Pod として残すかを実装で決める。
- 少なくとも成功扱いで返さない。
- Server が connection 開始時に `Alert` / `Snapshot` を書く設計と競合しない。
- client 側が `Alert` / `Snapshot` を読みながら `Method::Run` ack を待つ形にする。
- `send_run_and_confirm` は connect-time `Snapshot` を消化してから `Method::Run` を送る。
- live Pod status probe は replayed `Alert` によって status 取得を落とさない。
- `probe_socket` は first event だけで判断せず、`Snapshot` まで初期 event を読む。
- `SpawnPod` 成功後は、child Pod の metadata が pending でも、初回 run が開始済みであることを確認できる。
- session log materialization のタイミングそのものは別設計でもよい。
- `SendToPod` と `SpawnPod` の run delivery confirmation ロジックを可能な範囲で共通化する。
## 完了条件
- `SpawnPod` が初回 task の受理確認を待つ。
- 初回 task が実行されない race を再現する test または regression test がある。
- connect-time `Alert` / `Snapshot` がある状態でも `send_run_and_confirm` が詰まらず、受理 event を観測する regression test がある。
- `probe_socket` が replayed `Alert` の後の `Snapshot` から status を取得できる regression test がある。
- `SpawnPod` が success を返した後、child Pod が idle pending のまま task 未実行になる状態が起きない。
- delivery timeout / failure 時の error message が人間に分かる。
- `cargo fmt --check` と関連 crate の test が通る。
## 範囲外
- `tui -r` picker に live pending Pod を表示する修正。
- session log の SegmentStart materialization 方針変更。
- spawned child Pod panel UI。
-84
View File
@@ -1,84 +0,0 @@
---
id: 20260527-000012-spawnpod-initial-run-confirmation
slug: spawnpod-initial-run-confirmation
title: SpawnPod: initial Run delivery confirmation
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:12Z
updated_at: 2026-05-28T13:24:48Z
assignee: null
legacy_ticket: tickets/spawnpod-initial-run-confirmation.md
---
## Migration reference
- legacy_ticket: tickets/spawnpod-initial-run-confirmation.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# SpawnPod: initial Run delivery confirmation
## 背景
`SpawnPod` は child Pod を起動し、初回 task を `Method::Run` として送る。しかし、実例として `impl-llm-worker-stream-continuation` を再作成した際、runtime registry / socket / process は生きている一方で、初回 task の session log が materialize されず、Pod は `idle` のままだった。
確認された状態:
- `<runtime-dir>/pods.json` に live allocation がある
- `<runtime-dir>/<pod>/status.json` は `state: "idle"` と runtime `segment_id` を持つ
- `<insomnia-sessions>/pods/<pod>/metadata.json` は pending segment のまま
- 対応する session / segment `.jsonl` が存在しない
- `ReadPodOutput` は no new assistant text
`SpawnPod` の送信側は `send_run` で `Method::Run` を write してすぐ切断し、`TurnStart` 等の ack を待っていない。一方 server 側は接続直後に `Snapshot` を書いてから method を読むため、client がすぐ close すると server が snapshot write で失敗し、method を読む前に connection handler が終了する race があり得る。
この場合 `SpawnPod` は成功を返すが、child Pod は初回 task を実行していない。
同種の問題は child Pod の通知経路でも既に踏んでおり、送信側が write 後にすぐ切断せず、receiver 側の acknowledgement / observable event を待つ形にして解消している。`SpawnPod` の初回 task delivery も同じ性質の race と見なす。
追加確認として、Pod socket server は接続直後に replayed `Alert` と connect-time `Snapshot` を送ってから client `Method` を読む。したがって one-shot / send-only client は初期 event を消化してから Method を送る必要がある。
- `send_run_and_confirm` は `Method::Run` を送った後に event を読む実装になっており、Snapshot が大きい場合や Run payload が大きい場合に双方向で詰まる余地がある。
- `connect_and_send` / `fetch_history` は既に Snapshot まで drain / read しており、この系統の問題は対策済み。
- `probe_socket` は最初の event だけを見て `Snapshot` でなければ status を取らないため、replayed `Alert` が先に来る live Pod で reachable だが status unknown になる可能性がある。
- `PodClient::connect` は background reader を起動するため、通常の TUI attach / interactive client では初期 Snapshot を詰まらせにくい。
## 方針
`SpawnPod` は child process / socket の起動だけでなく、初回 task が controller に受理され、少なくとも `UserMessage` または `TurnStart` が観測できるまで確認してから成功を返す。
既存の `SendToPod` / `SpawnPod` が使う run delivery confirmation ロジックを、接続直後の `Alert` / `Snapshot` drain を含む形へ共通化・安全化する。
## 要件
- `SpawnPod` の初回 task 送信は fire-and-forget にしない。
- `Method::Run` 送信後、`UserMessage` / `TurnStart` / `InvokeStart` など、run が受理されたことを示す event を待つ。
- timeout 時は `SpawnPod` を失敗扱いにする。
- 初回 task delivery に失敗した場合、process / registry / delegated scope の扱いを明確にする。
- cleanup するか、attach 可能な idle Pod として残すかを実装で決める。
- 少なくとも成功扱いで返さない。
- Server が connection 開始時に `Alert` / `Snapshot` を書く設計と競合しない。
- client 側が `Alert` / `Snapshot` を読みながら `Method::Run` ack を待つ形にする。
- `send_run_and_confirm` は connect-time `Snapshot` を消化してから `Method::Run` を送る。
- live Pod status probe は replayed `Alert` によって status 取得を落とさない。
- `probe_socket` は first event だけで判断せず、`Snapshot` まで初期 event を読む。
- `SpawnPod` 成功後は、child Pod の metadata が pending でも、初回 run が開始済みであることを確認できる。
- session log materialization のタイミングそのものは別設計でもよい。
- `SendToPod` と `SpawnPod` の run delivery confirmation ロジックを可能な範囲で共通化する。
## 完了条件
- `SpawnPod` が初回 task の受理確認を待つ。
- 初回 task が実行されない race を再現する test または regression test がある。
- connect-time `Alert` / `Snapshot` がある状態でも `send_run_and_confirm` が詰まらず、受理 event を観測する regression test がある。
- `probe_socket` が replayed `Alert` の後の `Snapshot` から status を取得できる regression test がある。
- `SpawnPod` が success を返した後、child Pod が idle pending のまま task 未実行になる状態が起きない。
- delivery timeout / failure 時の error message が人間に分かる。
- `cargo fmt --check` と関連 crate の test が通る。
## 範囲外
- `tui -r` picker に live pending Pod を表示する修正。
- session log の SegmentStart materialization 方針変更。
- spawned child Pod panel UI。
-99
View File
@@ -1,99 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:12Z -->
## Migrated
Migrated from tickets/spawnpod-initial-run-confirmation.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-28T13:24:48Z status: closed -->
## Closed
---
id: 20260527-000012-spawnpod-initial-run-confirmation
slug: spawnpod-initial-run-confirmation
title: SpawnPod: initial Run delivery confirmation
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:12Z
updated_at: 2026-05-28T13:24:48Z
assignee: null
legacy_ticket: tickets/spawnpod-initial-run-confirmation.md
---
## Migration reference
- legacy_ticket: tickets/spawnpod-initial-run-confirmation.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# SpawnPod: initial Run delivery confirmation
## 背景
`SpawnPod` は child Pod を起動し、初回 task を `Method::Run` として送る。しかし、実例として `impl-llm-worker-stream-continuation` を再作成した際、runtime registry / socket / process は生きている一方で、初回 task の session log が materialize されず、Pod は `idle` のままだった。
確認された状態:
- `<runtime-dir>/pods.json` に live allocation がある
- `<runtime-dir>/<pod>/status.json` は `state: "idle"` と runtime `segment_id` を持つ
- `<insomnia-sessions>/pods/<pod>/metadata.json` は pending segment のまま
- 対応する session / segment `.jsonl` が存在しない
- `ReadPodOutput` は no new assistant text
`SpawnPod` の送信側は `send_run` で `Method::Run` を write してすぐ切断し、`TurnStart` 等の ack を待っていない。一方 server 側は接続直後に `Snapshot` を書いてから method を読むため、client がすぐ close すると server が snapshot write で失敗し、method を読む前に connection handler が終了する race があり得る。
この場合 `SpawnPod` は成功を返すが、child Pod は初回 task を実行していない。
同種の問題は child Pod の通知経路でも既に踏んでおり、送信側が write 後にすぐ切断せず、receiver 側の acknowledgement / observable event を待つ形にして解消している。`SpawnPod` の初回 task delivery も同じ性質の race と見なす。
追加確認として、Pod socket server は接続直後に replayed `Alert` と connect-time `Snapshot` を送ってから client `Method` を読む。したがって one-shot / send-only client は初期 event を消化してから Method を送る必要がある。
- `send_run_and_confirm` は `Method::Run` を送った後に event を読む実装になっており、Snapshot が大きい場合や Run payload が大きい場合に双方向で詰まる余地がある。
- `connect_and_send` / `fetch_history` は既に Snapshot まで drain / read しており、この系統の問題は対策済み。
- `probe_socket` は最初の event だけを見て `Snapshot` でなければ status を取らないため、replayed `Alert` が先に来る live Pod で reachable だが status unknown になる可能性がある。
- `PodClient::connect` は background reader を起動するため、通常の TUI attach / interactive client では初期 Snapshot を詰まらせにくい。
## 方針
`SpawnPod` は child process / socket の起動だけでなく、初回 task が controller に受理され、少なくとも `UserMessage` または `TurnStart` が観測できるまで確認してから成功を返す。
既存の `SendToPod` / `SpawnPod` が使う run delivery confirmation ロジックを、接続直後の `Alert` / `Snapshot` drain を含む形へ共通化・安全化する。
## 要件
- `SpawnPod` の初回 task 送信は fire-and-forget にしない。
- `Method::Run` 送信後、`UserMessage` / `TurnStart` / `InvokeStart` など、run が受理されたことを示す event を待つ。
- timeout 時は `SpawnPod` を失敗扱いにする。
- 初回 task delivery に失敗した場合、process / registry / delegated scope の扱いを明確にする。
- cleanup するか、attach 可能な idle Pod として残すかを実装で決める。
- 少なくとも成功扱いで返さない。
- Server が connection 開始時に `Alert` / `Snapshot` を書く設計と競合しない。
- client 側が `Alert` / `Snapshot` を読みながら `Method::Run` ack を待つ形にする。
- `send_run_and_confirm` は connect-time `Snapshot` を消化してから `Method::Run` を送る。
- live Pod status probe は replayed `Alert` によって status 取得を落とさない。
- `probe_socket` は first event だけで判断せず、`Snapshot` まで初期 event を読む。
- `SpawnPod` 成功後は、child Pod の metadata が pending でも、初回 run が開始済みであることを確認できる。
- session log materialization のタイミングそのものは別設計でもよい。
- `SendToPod` と `SpawnPod` の run delivery confirmation ロジックを可能な範囲で共通化する。
## 完了条件
- `SpawnPod` が初回 task の受理確認を待つ。
- 初回 task が実行されない race を再現する test または regression test がある。
- connect-time `Alert` / `Snapshot` がある状態でも `send_run_and_confirm` が詰まらず、受理 event を観測する regression test がある。
- `probe_socket` が replayed `Alert` の後の `Snapshot` から status を取得できる regression test がある。
- `SpawnPod` が success を返した後、child Pod が idle pending のまま task 未実行になる状態が起きない。
- delivery timeout / failure 時の error message が人間に分かる。
- `cargo fmt --check` と関連 crate の test が通る。
## 範囲外
- `tui -r` picker に live pending Pod を表示する修正。
- session log の SegmentStart materialization 方針変更。
- spawned child Pod panel UI。
---
-203
View File
@@ -1,203 +0,0 @@
---
title: "Ticket 管理: tickets.sh による WorkItem / Thread MVP"
state: "closed"
created_at: "2026-05-27T00:00:13Z"
updated_at: "2026-05-27T19:28:41Z"
---
## Migration reference
- legacy_ticket: tickets/tickets-sh-workitem-thread-mvp.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Ticket 管理: tickets.sh による WorkItem / Thread MVP
## 背景
現在の ticket 運用は `TODO.md` と `tickets/*.md`、必要に応じて `tickets/*.review.md` を Git 履歴で管理している。要件と完了条件を追うには機能しているが、multi-agent worktree workflow と組み合わせると review / 修正依頼 / 実装報告が扱いづらい。
特に `.review.md` は、review artifact を main workspace の ticket directory に作る必要がある。一方で実装 Pod は child worktree だけに write scope を持つため、review thread と実装 thread が分断されやすい。子 Pod を止めて scope を回収し、review file を作り、再度 restore / spawn するような運用になりがちで面倒である。
Git は履歴の保存層として有用だが、人間や AI maintainer が毎回 file move / delete / review file 作成 / git log 探索を直接操作するのは低級すぎる。repository 内の file backend を正本にしつつ、`tickets.sh` で create / list / show / comment / review / close などの意味的操作を提供する。
この ticket は `docs/plan/maintainer-work-items.md` の抽象メモを踏まえた最小実装である。既存 `TODO.md` / `tickets/` を併用したまま新規領域を試すのではなく、今回の MVP では既存 `TODO.md` / `tickets/*.md` を手動で `work-items/` に移し、`tickets.sh doctor` が通る状態までをゴールにする。
## 方針
- 新しい正本は repo root の `work-items/` に置く。
- 既存 `TODO.md` / `tickets/*.md` は手動 migration の入力として扱う。
- migration 完了後、`TODO.md` は残す場合でも legacy / generated view 相当の最小内容にする。少なくとも未完了 item の正本を `tickets/*.md` に残さない。
- `tickets.sh` は Git を内部保存層として前提にしてよいが、操作単位は file path ではなく WorkItem 操作にする。
- 初期実装では自動 commit しない。
- `tickets.sh` は file 操作まで。
- `git add/commit` は利用者または追加指示に任せる。
- `--help` だけで基本操作と migration 方針が分かるようにする。
- shell script なので依存は POSIX shell + 基本 Unix tool に寄せる。`jq` 必須にはしない。
- 既存 `tickets/*.review.md` がある場合は、対象 WorkItem の `thread.md` に review event として手動で移す。
## backend schema
```text
work-items/
README.md
open/
20260526-123456-short-slug/
item.md
thread.md
artifacts/
pending/
...
closed/
...
resolution.md
artifacts/
```
`item.md` は YAML frontmatter + Markdown body。
```yaml
---
id: 20260526-123456-short-slug
slug: short-slug
title: Human-readable title
status: open
kind: feature
priority: P2
labels: [maintainer, workflow]
created_at: 2026-05-26T12:34:56Z
updated_at: 2026-05-26T12:34:56Z
assignee: null
---
## Background
...
## Acceptance criteria
- ...
```
`legacy_ticket` は migration 直後の追跡用 metadata とする。移行元 file は Git history で参照できるため、migration commit 後に `tickets/foo.md` を残し続けない。
`thread.md` は append-only Markdown event log とする。JSONL より人間が読みやすいことを優先する。
```md
<!-- event: comment author: hare at: 2026-05-26T12:40:00Z -->
## Comment
...
---
<!-- event: review author: orchestrator at: 2026-05-26T13:00:00Z status: request_changes -->
## Review: request changes
...
```
`tickets.sh` が必ず event header と separator を付ける。機械 parse は初期実装では簡易でよい。
## コマンド MVP
```text
./tickets.sh help
./tickets.sh list [--status open|pending|closed|all]
./tickets.sh show <id-or-slug>
./tickets.sh create --title <title> [--slug <slug>] [--kind <kind>] [--priority P2] [--label a,b]
./tickets.sh comment <id-or-slug> [--role comment|plan|decision|implementation_report] [--author <name>] [--file <path>]
./tickets.sh review <id-or-slug> --approve|--request-changes [--author <name>] [--file <path>]
./tickets.sh status <id-or-slug> open|pending|closed
./tickets.sh close <id-or-slug> [--resolution <text>|--file <path>]
./tickets.sh doctor
```
`help` / `--help` は同じ内容を出す。
### list
- `work-items/{open,pending,closed}/*/item.md` を scan する。
- status / id / slug / title / kind / priority / updated_at を一行で表示する。
- 初期実装では frontmatter parser は簡易でよい。
### show
- `item.md` と `thread.md` の末尾を読みやすく表示する。
- 完全な thread 全体を出すか、初期は tail 表示でもよい。`--all` は後続でよい。
### create
- ID は `YYYYMMDD-HHMMSS-<slug>`。
- 同一 path が存在する場合は短い random suffix または pid suffix を付けて衝突回避する。
- `work-items/open/<id>/item.md`, `thread.md`, `artifacts/` を作る。
- central `SEQUENCE` は作らない。
### comment / review
- `thread.md` に append する。
- `item.md` の `updated_at` を更新する。
- review は role/comment の special case として、`approve` / `request_changes` が分かる event header を付ける。
- `.review.md` は作らない。
### status / close
- status directory を move する。
- `item.md` frontmatter の `status` と `updated_at` を更新する。
- `close` は `status closed` + optional `resolution.md` + close event append。
- 完了しても削除しない。
### doctor
- directory status と frontmatter `status` の一致を検査する。
- `item.md` / `thread.md` / `artifacts/` の存在を検査する。
- duplicate slug / duplicate id を検査する。
- `TODO.md` / `tickets/*.md` に未移行の未完了 ticket が残っていないことを検査する。
- `tickets/*.review.md` が残っていないことを検査する。
- work-items 配下の markdown frontmatter に必須 field があることを検査する。
- error は非ゼロ exit。
## 手動 migration 要件
この ticket の作業には既存運用からの手動 migration を含める。
- 現在 `TODO.md` に載っている未完了 ticket を `work-items/open/` に移す。
- 各 `tickets/*.md` の本文を対応する `item.md` に移す。
- 既存 `tickets/*.review.md` があれば対応する `thread.md` に review event として移す。
- 移行元 ticket path は `legacy_ticket` metadata または本文の参照欄に残す。
- migration commit 後、未完了 work item の正本として `tickets/*.md` を残さない。
- `TODO.md` は legacy notice / generated view 相当の最小内容に更新する。
- `tickets.sh doctor` が repository の移行状態まで含めて 0 になることをゴールにする。
## 要件
- `tickets.sh --help` で使い方と migration 後の配置が分かる。
- `create/list/show/comment/review/status/close/doctor` が動く。
- WorkItem ID は timestamp-based で、central sequence file を使わない。
- close しても削除せず `work-items/closed/` に移動する。
- review は `.review.md` ではなく thread event として append できる。
- `doctor` が directory status と frontmatter status の不一致を検出する。
- `doctor` が未移行 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` を検出する。
- 初期実装では自動 git commit しない。
- README 相当の usage は `--help` または `work-items/README.md` に含める。
## 完了条件
- repo root に `tickets.sh` が追加される。
- `work-items/README.md` で schema / migration 後の運用が説明される。
- `tickets.sh create` で WorkItem を作成できる。
- `tickets.sh comment` / `tickets.sh review` で thread event を append できる。
- `tickets.sh close` で closed に移動できる。
- 既存 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` が手動で `work-items/` に移行される。
- migration 後、`tickets.sh doctor` が repository 全体の状態に対して 0 になる。
- 不整合 fixture または smoke test で `doctor` が非ゼロになることを確認する。
- shellcheck が利用可能なら通る。無い場合は少なくとも focused smoke test を実行する。
## 範囲外
- Rust crate / DB / remote backend 実装。
- LeaseStore / Pod run tracking の実装。
- Git commit の自動化。
- TUI 統合。
- WorkItem から TODO.md を自動生成する仕組み。
-211
View File
@@ -1,211 +0,0 @@
---
id: 20260527-000013-tickets-sh-workitem-thread-mvp
slug: tickets-sh-workitem-thread-mvp
title: Ticket 管理: tickets.sh による WorkItem / Thread MVP
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:13Z
updated_at: 2026-05-27T19:28:41Z
assignee: null
legacy_ticket: tickets/tickets-sh-workitem-thread-mvp.md
---
## Migration reference
- legacy_ticket: tickets/tickets-sh-workitem-thread-mvp.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Ticket 管理: tickets.sh による WorkItem / Thread MVP
## 背景
現在の ticket 運用は `TODO.md` と `tickets/*.md`、必要に応じて `tickets/*.review.md` を Git 履歴で管理している。要件と完了条件を追うには機能しているが、multi-agent worktree workflow と組み合わせると review / 修正依頼 / 実装報告が扱いづらい。
特に `.review.md` は、review artifact を main workspace の ticket directory に作る必要がある。一方で実装 Pod は child worktree だけに write scope を持つため、review thread と実装 thread が分断されやすい。子 Pod を止めて scope を回収し、review file を作り、再度 restore / spawn するような運用になりがちで面倒である。
Git は履歴の保存層として有用だが、人間や AI maintainer が毎回 file move / delete / review file 作成 / git log 探索を直接操作するのは低級すぎる。repository 内の file backend を正本にしつつ、`tickets.sh` で create / list / show / comment / review / close などの意味的操作を提供する。
この ticket は `docs/plan/maintainer-work-items.md` の抽象メモを踏まえた最小実装である。既存 `TODO.md` / `tickets/` を併用したまま新規領域を試すのではなく、今回の MVP では既存 `TODO.md` / `tickets/*.md` を手動で `work-items/` に移し、`tickets.sh doctor` が通る状態までをゴールにする。
## 方針
- 新しい正本は repo root の `work-items/` に置く。
- 既存 `TODO.md` / `tickets/*.md` は手動 migration の入力として扱う。
- migration 完了後、`TODO.md` は残す場合でも legacy / generated view 相当の最小内容にする。少なくとも未完了 item の正本を `tickets/*.md` に残さない。
- `tickets.sh` は Git を内部保存層として前提にしてよいが、操作単位は file path ではなく WorkItem 操作にする。
- 初期実装では自動 commit しない。
- `tickets.sh` は file 操作まで。
- `git add/commit` は利用者または追加指示に任せる。
- `--help` だけで基本操作と migration 方針が分かるようにする。
- shell script なので依存は POSIX shell + 基本 Unix tool に寄せる。`jq` 必須にはしない。
- 既存 `tickets/*.review.md` がある場合は、対象 WorkItem の `thread.md` に review event として手動で移す。
## backend schema
```text
work-items/
README.md
open/
20260526-123456-short-slug/
item.md
thread.md
artifacts/
pending/
...
closed/
...
resolution.md
artifacts/
```
`item.md` は YAML frontmatter + Markdown body。
```yaml
---
id: 20260526-123456-short-slug
slug: short-slug
title: Human-readable title
status: open
kind: feature
priority: P2
labels: [maintainer, workflow]
created_at: 2026-05-26T12:34:56Z
updated_at: 2026-05-26T12:34:56Z
assignee: null
legacy_ticket: tickets/foo.md
---
## Background
...
## Acceptance criteria
- ...
```
`legacy_ticket` は migration 直後の追跡用 metadata とする。移行元 file は Git history で参照できるため、migration commit 後に `tickets/foo.md` を残し続けない。
`thread.md` は append-only Markdown event log とする。JSONL より人間が読みやすいことを優先する。
```md
<!-- event: comment author: hare at: 2026-05-26T12:40:00Z -->
## Comment
...
---
<!-- event: review author: orchestrator at: 2026-05-26T13:00:00Z status: request_changes -->
## Review: request changes
...
```
`tickets.sh` が必ず event header と separator を付ける。機械 parse は初期実装では簡易でよい。
## コマンド MVP
```text
./tickets.sh help
./tickets.sh list [--status open|pending|closed|all]
./tickets.sh show <id-or-slug>
./tickets.sh create --title <title> [--slug <slug>] [--kind <kind>] [--priority P2] [--label a,b]
./tickets.sh comment <id-or-slug> [--role comment|plan|decision|implementation_report] [--author <name>] [--file <path>]
./tickets.sh review <id-or-slug> --approve|--request-changes [--author <name>] [--file <path>]
./tickets.sh status <id-or-slug> open|pending|closed
./tickets.sh close <id-or-slug> [--resolution <text>|--file <path>]
./tickets.sh doctor
```
`help` / `--help` は同じ内容を出す。
### list
- `work-items/{open,pending,closed}/*/item.md` を scan する。
- status / id / slug / title / kind / priority / updated_at を一行で表示する。
- 初期実装では frontmatter parser は簡易でよい。
### show
- `item.md` と `thread.md` の末尾を読みやすく表示する。
- 完全な thread 全体を出すか、初期は tail 表示でもよい。`--all` は後続でよい。
### create
- ID は `YYYYMMDD-HHMMSS-<slug>`。
- 同一 path が存在する場合は短い random suffix または pid suffix を付けて衝突回避する。
- `work-items/open/<id>/item.md`, `thread.md`, `artifacts/` を作る。
- central `SEQUENCE` は作らない。
### comment / review
- `thread.md` に append する。
- `item.md` の `updated_at` を更新する。
- review は role/comment の special case として、`approve` / `request_changes` が分かる event header を付ける。
- `.review.md` は作らない。
### status / close
- status directory を move する。
- `item.md` frontmatter の `status` と `updated_at` を更新する。
- `close` は `status closed` + optional `resolution.md` + close event append。
- 完了しても削除しない。
### doctor
- directory status と frontmatter `status` の一致を検査する。
- `item.md` / `thread.md` / `artifacts/` の存在を検査する。
- duplicate slug / duplicate id を検査する。
- `TODO.md` / `tickets/*.md` に未移行の未完了 ticket が残っていないことを検査する。
- `tickets/*.review.md` が残っていないことを検査する。
- work-items 配下の markdown frontmatter に必須 field があることを検査する。
- error は非ゼロ exit。
## 手動 migration 要件
この ticket の作業には既存運用からの手動 migration を含める。
- 現在 `TODO.md` に載っている未完了 ticket を `work-items/open/` に移す。
- 各 `tickets/*.md` の本文を対応する `item.md` に移す。
- 既存 `tickets/*.review.md` があれば対応する `thread.md` に review event として移す。
- 移行元 ticket path は `legacy_ticket` metadata または本文の参照欄に残す。
- migration commit 後、未完了 work item の正本として `tickets/*.md` を残さない。
- `TODO.md` は legacy notice / generated view 相当の最小内容に更新する。
- `tickets.sh doctor` が repository の移行状態まで含めて 0 になることをゴールにする。
## 要件
- `tickets.sh --help` で使い方と migration 後の配置が分かる。
- `create/list/show/comment/review/status/close/doctor` が動く。
- WorkItem ID は timestamp-based で、central sequence file を使わない。
- close しても削除せず `work-items/closed/` に移動する。
- review は `.review.md` ではなく thread event として append できる。
- `doctor` が directory status と frontmatter status の不一致を検出する。
- `doctor` が未移行 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` を検出する。
- 初期実装では自動 git commit しない。
- README 相当の usage は `--help` または `work-items/README.md` に含める。
## 完了条件
- repo root に `tickets.sh` が追加される。
- `work-items/README.md` で schema / migration 後の運用が説明される。
- `tickets.sh create` で WorkItem を作成できる。
- `tickets.sh comment` / `tickets.sh review` で thread event を append できる。
- `tickets.sh close` で closed に移動できる。
- 既存 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` が手動で `work-items/` に移行される。
- migration 後、`tickets.sh doctor` が repository 全体の状態に対して 0 になる。
- 不整合 fixture または smoke test で `doctor` が非ゼロになることを確認する。
- shellcheck が利用可能なら通る。無い場合は少なくとも focused smoke test を実行する。
## 範囲外
- Rust crate / DB / remote backend 実装。
- LeaseStore / Pod run tracking の実装。
- Git commit の自動化。
- TUI 統合。
- WorkItem から TODO.md を自動生成する仕組み。
-226
View File
@@ -1,226 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:13Z -->
## Migrated
Migrated from tickets/tickets-sh-workitem-thread-mvp.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-27T19:28:41Z status: closed -->
## Closed
---
id: 20260527-000013-tickets-sh-workitem-thread-mvp
slug: tickets-sh-workitem-thread-mvp
title: Ticket 管理: tickets.sh による WorkItem / Thread MVP
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:13Z
updated_at: 2026-05-27T19:28:41Z
assignee: null
legacy_ticket: tickets/tickets-sh-workitem-thread-mvp.md
---
## Migration reference
- legacy_ticket: tickets/tickets-sh-workitem-thread-mvp.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Ticket 管理: tickets.sh による WorkItem / Thread MVP
## 背景
現在の ticket 運用は `TODO.md` と `tickets/*.md`、必要に応じて `tickets/*.review.md` を Git 履歴で管理している。要件と完了条件を追うには機能しているが、multi-agent worktree workflow と組み合わせると review / 修正依頼 / 実装報告が扱いづらい。
特に `.review.md` は、review artifact を main workspace の ticket directory に作る必要がある。一方で実装 Pod は child worktree だけに write scope を持つため、review thread と実装 thread が分断されやすい。子 Pod を止めて scope を回収し、review file を作り、再度 restore / spawn するような運用になりがちで面倒である。
Git は履歴の保存層として有用だが、人間や AI maintainer が毎回 file move / delete / review file 作成 / git log 探索を直接操作するのは低級すぎる。repository 内の file backend を正本にしつつ、`tickets.sh` で create / list / show / comment / review / close などの意味的操作を提供する。
この ticket は `docs/plan/maintainer-work-items.md` の抽象メモを踏まえた最小実装である。既存 `TODO.md` / `tickets/` を併用したまま新規領域を試すのではなく、今回の MVP では既存 `TODO.md` / `tickets/*.md` を手動で `work-items/` に移し、`tickets.sh doctor` が通る状態までをゴールにする。
## 方針
- 新しい正本は repo root の `work-items/` に置く。
- 既存 `TODO.md` / `tickets/*.md` は手動 migration の入力として扱う。
- migration 完了後、`TODO.md` は残す場合でも legacy / generated view 相当の最小内容にする。少なくとも未完了 item の正本を `tickets/*.md` に残さない。
- `tickets.sh` は Git を内部保存層として前提にしてよいが、操作単位は file path ではなく WorkItem 操作にする。
- 初期実装では自動 commit しない。
- `tickets.sh` は file 操作まで。
- `git add/commit` は利用者または追加指示に任せる。
- `--help` だけで基本操作と migration 方針が分かるようにする。
- shell script なので依存は POSIX shell + 基本 Unix tool に寄せる。`jq` 必須にはしない。
- 既存 `tickets/*.review.md` がある場合は、対象 WorkItem の `thread.md` に review event として手動で移す。
## backend schema
```text
work-items/
README.md
open/
20260526-123456-short-slug/
item.md
thread.md
artifacts/
pending/
...
closed/
...
resolution.md
artifacts/
```
`item.md` は YAML frontmatter + Markdown body。
```yaml
---
id: 20260526-123456-short-slug
slug: short-slug
title: Human-readable title
status: open
kind: feature
priority: P2
labels: [maintainer, workflow]
created_at: 2026-05-26T12:34:56Z
updated_at: 2026-05-26T12:34:56Z
assignee: null
legacy_ticket: tickets/foo.md
---
## Background
...
## Acceptance criteria
- ...
```
`legacy_ticket` は migration 直後の追跡用 metadata とする。移行元 file は Git history で参照できるため、migration commit 後に `tickets/foo.md` を残し続けない。
`thread.md` は append-only Markdown event log とする。JSONL より人間が読みやすいことを優先する。
```md
<!-- event: comment author: hare at: 2026-05-26T12:40:00Z -->
## Comment
...
---
<!-- event: review author: orchestrator at: 2026-05-26T13:00:00Z status: request_changes -->
## Review: request changes
...
```
`tickets.sh` が必ず event header と separator を付ける。機械 parse は初期実装では簡易でよい。
## コマンド MVP
```text
./tickets.sh help
./tickets.sh list [--status open|pending|closed|all]
./tickets.sh show <id-or-slug>
./tickets.sh create --title <title> [--slug <slug>] [--kind <kind>] [--priority P2] [--label a,b]
./tickets.sh comment <id-or-slug> [--role comment|plan|decision|implementation_report] [--author <name>] [--file <path>]
./tickets.sh review <id-or-slug> --approve|--request-changes [--author <name>] [--file <path>]
./tickets.sh status <id-or-slug> open|pending|closed
./tickets.sh close <id-or-slug> [--resolution <text>|--file <path>]
./tickets.sh doctor
```
`help` / `--help` は同じ内容を出す。
### list
- `work-items/{open,pending,closed}/*/item.md` を scan する。
- status / id / slug / title / kind / priority / updated_at を一行で表示する。
- 初期実装では frontmatter parser は簡易でよい。
### show
- `item.md` と `thread.md` の末尾を読みやすく表示する。
- 完全な thread 全体を出すか、初期は tail 表示でもよい。`--all` は後続でよい。
### create
- ID は `YYYYMMDD-HHMMSS-<slug>`。
- 同一 path が存在する場合は短い random suffix または pid suffix を付けて衝突回避する。
- `work-items/open/<id>/item.md`, `thread.md`, `artifacts/` を作る。
- central `SEQUENCE` は作らない。
### comment / review
- `thread.md` に append する。
- `item.md` の `updated_at` を更新する。
- review は role/comment の special case として、`approve` / `request_changes` が分かる event header を付ける。
- `.review.md` は作らない。
### status / close
- status directory を move する。
- `item.md` frontmatter の `status` と `updated_at` を更新する。
- `close` は `status closed` + optional `resolution.md` + close event append。
- 完了しても削除しない。
### doctor
- directory status と frontmatter `status` の一致を検査する。
- `item.md` / `thread.md` / `artifacts/` の存在を検査する。
- duplicate slug / duplicate id を検査する。
- `TODO.md` / `tickets/*.md` に未移行の未完了 ticket が残っていないことを検査する。
- `tickets/*.review.md` が残っていないことを検査する。
- work-items 配下の markdown frontmatter に必須 field があることを検査する。
- error は非ゼロ exit。
## 手動 migration 要件
この ticket の作業には既存運用からの手動 migration を含める。
- 現在 `TODO.md` に載っている未完了 ticket を `work-items/open/` に移す。
- 各 `tickets/*.md` の本文を対応する `item.md` に移す。
- 既存 `tickets/*.review.md` があれば対応する `thread.md` に review event として移す。
- 移行元 ticket path は `legacy_ticket` metadata または本文の参照欄に残す。
- migration commit 後、未完了 work item の正本として `tickets/*.md` を残さない。
- `TODO.md` は legacy notice / generated view 相当の最小内容に更新する。
- `tickets.sh doctor` が repository の移行状態まで含めて 0 になることをゴールにする。
## 要件
- `tickets.sh --help` で使い方と migration 後の配置が分かる。
- `create/list/show/comment/review/status/close/doctor` が動く。
- WorkItem ID は timestamp-based で、central sequence file を使わない。
- close しても削除せず `work-items/closed/` に移動する。
- review は `.review.md` ではなく thread event として append できる。
- `doctor` が directory status と frontmatter status の不一致を検出する。
- `doctor` が未移行 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` を検出する。
- 初期実装では自動 git commit しない。
- README 相当の usage は `--help` または `work-items/README.md` に含める。
## 完了条件
- repo root に `tickets.sh` が追加される。
- `work-items/README.md` で schema / migration 後の運用が説明される。
- `tickets.sh create` で WorkItem を作成できる。
- `tickets.sh comment` / `tickets.sh review` で thread event を append できる。
- `tickets.sh close` で closed に移動できる。
- 既存 `TODO.md` / `tickets/*.md` / `tickets/*.review.md` が手動で `work-items/` に移行される。
- migration 後、`tickets.sh doctor` が repository 全体の状態に対して 0 になる。
- 不整合 fixture または smoke test で `doctor` が非ゼロになることを確認する。
- shellcheck が利用可能なら通る。無い場合は少なくとも focused smoke test を実行する。
## 範囲外
- Rust crate / DB / remote backend 実装。
- LeaseStore / Pod run tracking の実装。
- Git commit の自動化。
- TUI 統合。
- WorkItem から TODO.md を自動生成する仕組み。
---
-59
View File
@@ -1,59 +0,0 @@
---
title: "TUI: actionbar transient notice API"
state: "closed"
created_at: "2026-05-27T00:00:14Z"
updated_at: "2026-05-29T03:57:35Z"
---
## Migration reference
- legacy_ticket: tickets/tui-actionbar-transient-notice-api.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: actionbar transient notice API
## 背景
TUI の actionbar は最下部の補助表示行として、現在の mode や一時的な操作フィードバックを出す場所になりつつある。
一方で、現在は `Ctrl-C` の二段階終了 guard のような一時通知も `app.push_error(...)` 等で view 上に残る message として扱われている。これは後から見返すログではなく、数秒だけ見えれば十分な操作フィードバックである。
また、memory audit log 実装では extract / consolidation worker の直近 event を actionbar に表示する予定であり、個別機能ごとに ad hoc な actionbar 表示を増やすと優先順位・寿命・表示競合の扱いが散らばる。
## 方針
Actionbar を「history / transcript に残さない transient UI state」の共通表示面として扱う API を App 側に用意する。
永続的に残すべき Pod event / model output / tool result / user-visible error と、一時的な操作フィードバックを分離する。actionbar notice は UI の補助表示であり、LLM context や session history へ暗黙注入しない。
## 要件
- App に actionbar transient notice を設定・期限切れ・取得するための API を追加する。
- 例: `flash_actionbar_notice(text, duration)` または `set_actionbar_notice(...)`
- notice には最低限 `text`, `level`, `source`, `expires_at` 相当を持たせる。
- time source はテストしやすい形にする。
- actionbar rendering は transient notice を優先表示できる。
- 既存の command mode marker、queued input hint、scroll indicator、view mode label と競合しない優先順位を定義する。
- notice が期限切れなら表示しない。
- `Ctrl-C` の二段階終了 guard の表示を view log から actionbar notice に移す。
- `Pod keeps running` などの一時説明は transcript/view 上に残さない。
- 二度押しの挙動自体は変えない。
- memory worker の actionbar 表示が既に実装済みの場合、可能な範囲でこの API に寄せる。
- 未実装・別 branch 上の場合は、この ticket の範囲では API 設計が衝突しないようにする。
- actionbar notice は通常の LLM context に暗黙注入しない。
- 必要な正本ログは各機能の audit/session log に残す。
## 完了条件
- actionbar transient notice 用 API が App/UI に追加されている。
- `Ctrl-C` 二段階終了 guard の一時メッセージが actionbar に表示され、view log には残らない。
- notice の期限切れと優先表示の挙動がテストされている。
- 既存の command mode / queued input / scroll / view mode actionbar 表示が破綻していない。
- `cargo fmt --check` と関連 TUI テストが通る。
## 範囲外
- actionbar の複数行化。
- 汎用 notification center / viewer UI。
- Pod / worker の正本ログ形式の変更。
- memory audit log 本体の実装。
-66
View File
@@ -1,66 +0,0 @@
---
id: 20260527-000014-tui-actionbar-transient-notice-api
slug: tui-actionbar-transient-notice-api
title: TUI: actionbar transient notice API
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:14Z
updated_at: 2026-05-29T03:57:34Z
assignee: null
legacy_ticket: tickets/tui-actionbar-transient-notice-api.md
---
## Migration reference
- legacy_ticket: tickets/tui-actionbar-transient-notice-api.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: actionbar transient notice API
## 背景
TUI の actionbar は最下部の補助表示行として、現在の mode や一時的な操作フィードバックを出す場所になりつつある。
一方で、現在は `Ctrl-C` の二段階終了 guard のような一時通知も `app.push_error(...)` 等で view 上に残る message として扱われている。これは後から見返すログではなく、数秒だけ見えれば十分な操作フィードバックである。
また、memory audit log 実装では extract / consolidation worker の直近 event を actionbar に表示する予定であり、個別機能ごとに ad hoc な actionbar 表示を増やすと優先順位・寿命・表示競合の扱いが散らばる。
## 方針
Actionbar を「history / transcript に残さない transient UI state」の共通表示面として扱う API を App 側に用意する。
永続的に残すべき Pod event / model output / tool result / user-visible error と、一時的な操作フィードバックを分離する。actionbar notice は UI の補助表示であり、LLM context や session history へ暗黙注入しない。
## 要件
- App に actionbar transient notice を設定・期限切れ・取得するための API を追加する。
- 例: `flash_actionbar_notice(text, duration)` または `set_actionbar_notice(...)`
- notice には最低限 `text`, `level`, `source`, `expires_at` 相当を持たせる。
- time source はテストしやすい形にする。
- actionbar rendering は transient notice を優先表示できる。
- 既存の command mode marker、queued input hint、scroll indicator、view mode label と競合しない優先順位を定義する。
- notice が期限切れなら表示しない。
- `Ctrl-C` の二段階終了 guard の表示を view log から actionbar notice に移す。
- `Pod keeps running` などの一時説明は transcript/view 上に残さない。
- 二度押しの挙動自体は変えない。
- memory worker の actionbar 表示が既に実装済みの場合、可能な範囲でこの API に寄せる。
- 未実装・別 branch 上の場合は、この ticket の範囲では API 設計が衝突しないようにする。
- actionbar notice は通常の LLM context に暗黙注入しない。
- 必要な正本ログは各機能の audit/session log に残す。
## 完了条件
- actionbar transient notice 用 API が App/UI に追加されている。
- `Ctrl-C` 二段階終了 guard の一時メッセージが actionbar に表示され、view log には残らない。
- notice の期限切れと優先表示の挙動がテストされている。
- 既存の command mode / queued input / scroll / view mode actionbar 表示が破綻していない。
- `cargo fmt --check` と関連 TUI テストが通る。
## 範囲外
- actionbar の複数行化。
- 汎用 notification center / viewer UI。
- Pod / worker の正本ログ形式の変更。
- memory audit log 本体の実装。
-81
View File
@@ -1,81 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:14Z -->
## Migrated
Migrated from tickets/tui-actionbar-transient-notice-api.md. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-29T03:57:35Z status: closed -->
## Closed
---
id: 20260527-000014-tui-actionbar-transient-notice-api
slug: tui-actionbar-transient-notice-api
title: TUI: actionbar transient notice API
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:14Z
updated_at: 2026-05-29T03:57:34Z
assignee: null
legacy_ticket: tickets/tui-actionbar-transient-notice-api.md
---
## Migration reference
- legacy_ticket: tickets/tui-actionbar-transient-notice-api.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: actionbar transient notice API
## 背景
TUI の actionbar は最下部の補助表示行として、現在の mode や一時的な操作フィードバックを出す場所になりつつある。
一方で、現在は `Ctrl-C` の二段階終了 guard のような一時通知も `app.push_error(...)` 等で view 上に残る message として扱われている。これは後から見返すログではなく、数秒だけ見えれば十分な操作フィードバックである。
また、memory audit log 実装では extract / consolidation worker の直近 event を actionbar に表示する予定であり、個別機能ごとに ad hoc な actionbar 表示を増やすと優先順位・寿命・表示競合の扱いが散らばる。
## 方針
Actionbar を「history / transcript に残さない transient UI state」の共通表示面として扱う API を App 側に用意する。
永続的に残すべき Pod event / model output / tool result / user-visible error と、一時的な操作フィードバックを分離する。actionbar notice は UI の補助表示であり、LLM context や session history へ暗黙注入しない。
## 要件
- App に actionbar transient notice を設定・期限切れ・取得するための API を追加する。
- 例: `flash_actionbar_notice(text, duration)` または `set_actionbar_notice(...)`
- notice には最低限 `text`, `level`, `source`, `expires_at` 相当を持たせる。
- time source はテストしやすい形にする。
- actionbar rendering は transient notice を優先表示できる。
- 既存の command mode marker、queued input hint、scroll indicator、view mode label と競合しない優先順位を定義する。
- notice が期限切れなら表示しない。
- `Ctrl-C` の二段階終了 guard の表示を view log から actionbar notice に移す。
- `Pod keeps running` などの一時説明は transcript/view 上に残さない。
- 二度押しの挙動自体は変えない。
- memory worker の actionbar 表示が既に実装済みの場合、可能な範囲でこの API に寄せる。
- 未実装・別 branch 上の場合は、この ticket の範囲では API 設計が衝突しないようにする。
- actionbar notice は通常の LLM context に暗黙注入しない。
- 必要な正本ログは各機能の audit/session log に残す。
## 完了条件
- actionbar transient notice 用 API が App/UI に追加されている。
- `Ctrl-C` 二段階終了 guard の一時メッセージが actionbar に表示され、view log には残らない。
- notice の期限切れと優先表示の挙動がテストされている。
- 既存の command mode / queued input / scroll / view mode actionbar 表示が破綻していない。
- `cargo fmt --check` と関連 TUI テストが通る。
## 範囲外
- actionbar の複数行化。
- 汎用 notification center / viewer UI。
- Pod / worker の正本ログ形式の変更。
- memory audit log 本体の実装。
---
-74
View File
@@ -1,74 +0,0 @@
---
title: "TUI: navigation mode / block focus の設計"
state: 'closed'
created_at: "2026-05-27T00:00:15Z"
updated_at: '2026-06-20T16:31:29Z'
---
## Migration reference
- legacy_ticket: tickets/tui-navigation-mode-design.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: navigation mode / block focus の設計
## 背景
TUI の操作は現在 composer を中心にしており、履歴 block / task 表示 / queued input / system 操作の間を移動する統一的な navigation model はまだない。今後 command mode、manual compact、rollback、Pod picker、queue 編集などが増えると、Ctrl/Alt shortcut だけでは操作体系が散らばる。
一方で、通常入力は最優先で守る必要がある。特に streaming 中の入力取りこぼしや rollback restore、Run 中 input queue を入れたことで、composer の文字入力を暗黙操作で壊さないことが重要になっている。
本チケットは navigation mode のアイデアを保持する設計 ticket であり、すぐ実装する前提ではない。
## アイデア
- 通常は composer mode。
- 文字入力、Enter submit/queue、`@` / `#` / `/` 補完を優先する。
- `Esc` など明示操作で navigation mode に入る。
- 履歴 block / task pane / queued input / picker 的 UI に focus を移す。
- focus があることを視覚的に分かるようにする。
- navigation mode では `j/k` または `↑/↓` で block focus / scroll を行う。
- `i` / `Enter` / `Esc` で composer に戻る案。
- composer のカーソルが最上行にある時の `↑` で履歴へ抜ける自然操作も候補。
- ただし multi-line input / IME / completion / typed segment と衝突しやすいため、初期実装では慎重に扱う。
- 暗黙 focus 移動より、明示 navigation mode を優先する案が安全。
- command mode (`:`) とは分ける。
- command mode は system command 入力。
- navigation mode は画面上の対象選択 / scroll / block action。
## 検討事項
- mode 名と status/actionbar 表示。
- composer mode から navigation mode へ入る key。
- navigation mode から composer mode へ戻る key。
- `↑/↓` を composer cursor movement と block focus movement のどちらに使うか。
- block focus の単位。
- Turn header
- User message
- Assistant block
- Tool call/result
- System message
- Task row
- Queued input row
- focused block に対する action。
- copy
- expand/collapse
- retry/fork/rollback など将来操作
- scrollback と block focus の関係。
- search (`/` ではなく別 key が必要。`/` は WorkflowRef と衝突する可能性)。
- mouse support を入れるか。
## 完了条件(未確定)
- navigation mode の keymap と UI 表示方針が決まる。
- composer 入力を壊さない focus 移動ルールが決まる。
- block focus の最小単位が決まる。
- command mode / queue / rollback / Pod picker と衝突しない。
- 実装 ticket に分割できる。
## 範囲外
- 今すぐの実装。
- command mode の実装(`tickets/tui-command-mode.md`)。
- compact command の実装。
- Vim 完全互換。
-1
View File
@@ -1 +0,0 @@
Closed as no longer needed. The current TUI navigation/block-focus behavior is satisfactory, so the older navigation-mode design ticket is obsolete.
-25
View File
@@ -1,25 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:15Z -->
## Migrated
Migrated from tickets/tui-navigation-mode-design.md. No legacy review file was present at migration time.
---
<!-- event: state_changed author: hare at: 2026-06-20T16:31:29Z from: planning to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-20T16:31:29Z status: closed -->
## 完了
Closed as no longer needed. The current TUI navigation/block-focus behavior is satisfactory, so the older navigation-mode design ticket is obsolete.
---
-74
View File
@@ -1,74 +0,0 @@
---
title: "TUI picker: live pending Pod の表示優先と状態補完"
state: "closed"
created_at: "2026-05-27T00:00:16Z"
updated_at: "2026-05-30T05:00:56Z"
---
## Migration reference
- legacy_ticket: tickets/tui-picker-live-pending-pods.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI picker: live pending Pod の表示優先と状態補完
## 背景
`tui -r` の Pod picker は session store の name-keyed Pod metadata と runtime registry の live allocation を合わせて表示している。しかし、spawned child Pod がまだ最初の user turn / SegmentStart を materialize していない場合、Pod metadata は pending segment のままになり、session log も存在しない。
実例として、`impl-llm-worker-stream-continuation` は live socket と runtime registry 上の segment_id を持っていたが、metadata は以下のように `session_id` のみだった。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"active": {
"session_id": "019e5bc6-c3f3-7193-98a1-d64c635f86a1"
}
}
```
一方で runtime 側には segment_id が存在する。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"segment_id": "019e5bc6-c3f3-7193-98a1-d6559bdc9cd6",
"state": "idle"
}
```
この状態の Pod は attach 可能だが、session log がないため `updated_at = 0` になり、picker の `updated_at desc` sort と `MAX_ROWS = 10` truncate によって一覧から漏れやすい。
## 方針
Live socket が reachable な Pod は、session log / metadata active segment が未確定でも attach 可能な対象として picker に表示する。restore 可能性と attach 可能性を分け、live pending Pod は restore 不能でも live attach 対象として扱う。
## 要件
- `tui -r` picker は reachable live Pod を stopped Pod より優先して表示する。
- `updated_at = 0` でも live row が `MAX_ROWS` truncate で落ちない。
- sort key は少なくとも live first, updated_at desc, pod_name になる。
- Live Pod の metadata が pending segment の場合でも picker row に表示する。
- preview は `[live, pending segment]` など、人間が状態を理解できる文言にする。
- debug id 表示では runtime registry の segment_id を可能なら表示する。
- Runtime registry / live status に segment_id があり、metadata に segment_id が無い場合、表示上は runtime segment_id を補完できるようにする。
- ただし session log が存在しない限り restore 可能とは扱わない。
- attach は live socket に対して行う。
- Existing stopped / corrupt Pod metadata rows の表示を壊さない。
- `ListVisiblePods` / discovery 側にも同様の pending live 表示不整合がある場合、必要なら後続 ticket に切り出す。
- この ticket の主対象は `tui -r` picker。
## 完了条件
- live pending Pod が `tui -r` に表示される。
- live pending Pod を選択すると live socket に attach する。
- live pending Pod が多数の stopped Pod によって `MAX_ROWS` truncate から漏れない。
- picker の sort / row build の unit test が追加または更新されている。
- `cargo fmt --check` と `cargo test -p tui picker` あるいは関連 TUI test が通る。
## 範囲外
- pending Pod metadata を runtime segment_id で永続的に書き換えること。
- session log が無い Pod を restore 可能にすること。
- spawned child Pod の first turn / SegmentStart materialization 方針の変更。
- 汎用 spawned Pod panel UI。
-81
View File
@@ -1,81 +0,0 @@
---
id: 20260527-000016-tui-picker-live-pending-pods
slug: tui-picker-live-pending-pods
title: TUI picker: live pending Pod の表示優先と状態補完
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:16Z
updated_at: 2026-05-30T05:00:56Z
assignee: null
legacy_ticket: tickets/tui-picker-live-pending-pods.md
---
## Migration reference
- legacy_ticket: tickets/tui-picker-live-pending-pods.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI picker: live pending Pod の表示優先と状態補完
## 背景
`tui -r` の Pod picker は session store の name-keyed Pod metadata と runtime registry の live allocation を合わせて表示している。しかし、spawned child Pod がまだ最初の user turn / SegmentStart を materialize していない場合、Pod metadata は pending segment のままになり、session log も存在しない。
実例として、`impl-llm-worker-stream-continuation` は live socket と runtime registry 上の segment_id を持っていたが、metadata は以下のように `session_id` のみだった。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"active": {
"session_id": "019e5bc6-c3f3-7193-98a1-d64c635f86a1"
}
}
```
一方で runtime 側には segment_id が存在する。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"segment_id": "019e5bc6-c3f3-7193-98a1-d6559bdc9cd6",
"state": "idle"
}
```
この状態の Pod は attach 可能だが、session log がないため `updated_at = 0` になり、picker の `updated_at desc` sort と `MAX_ROWS = 10` truncate によって一覧から漏れやすい。
## 方針
Live socket が reachable な Pod は、session log / metadata active segment が未確定でも attach 可能な対象として picker に表示する。restore 可能性と attach 可能性を分け、live pending Pod は restore 不能でも live attach 対象として扱う。
## 要件
- `tui -r` picker は reachable live Pod を stopped Pod より優先して表示する。
- `updated_at = 0` でも live row が `MAX_ROWS` truncate で落ちない。
- sort key は少なくとも live first, updated_at desc, pod_name になる。
- Live Pod の metadata が pending segment の場合でも picker row に表示する。
- preview は `[live, pending segment]` など、人間が状態を理解できる文言にする。
- debug id 表示では runtime registry の segment_id を可能なら表示する。
- Runtime registry / live status に segment_id があり、metadata に segment_id が無い場合、表示上は runtime segment_id を補完できるようにする。
- ただし session log が存在しない限り restore 可能とは扱わない。
- attach は live socket に対して行う。
- Existing stopped / corrupt Pod metadata rows の表示を壊さない。
- `ListVisiblePods` / discovery 側にも同様の pending live 表示不整合がある場合、必要なら後続 ticket に切り出す。
- この ticket の主対象は `tui -r` picker。
## 完了条件
- live pending Pod が `tui -r` に表示される。
- live pending Pod を選択すると live socket に attach する。
- live pending Pod が多数の stopped Pod によって `MAX_ROWS` truncate から漏れない。
- picker の sort / row build の unit test が追加または更新されている。
- `cargo fmt --check` と `cargo test -p tui picker` あるいは関連 TUI test が通る。
## 範囲外
- pending Pod metadata を runtime segment_id で永続的に書き換えること。
- session log が無い Pod を restore 可能にすること。
- spawned child Pod の first turn / SegmentStart materialization 方針の変更。
- 汎用 spawned Pod panel UI。
-179
View File
@@ -1,179 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:16Z -->
## Migrated
Migrated from tickets/tui-picker-live-pending-pods.md. No legacy review file was present at migration time.
---
<!-- event: plan author: hare at: 2026-05-30T04:54:03Z -->
## Plan
## Preflight implementation plan
Classification: implementation-ready.
No blocking preflight gap remains. The product rule is settled: reachable live Pods must be visible/attachable even if durable session-log metadata is incomplete, but missing session logs must not make them restorable.
Implementation detail to preserve:
- Treat “pending live” as a display/model condition, not persisted state.
- Use reachable `LivePodInfo` plus incomplete stored/session summary or runtime-only segment id to improve row order/preview/debug ids.
- Do not mark the Pod restorable unless stored metadata has a usable active segment/session under existing restore rules.
Current code map:
- `crates/tui/src/picker.rs`: picker construction, row rendering, live attach socket override.
- `crates/tui/src/pod_list.rs`: shared model merge/sort/truncation/actions; current sort is updated_at desc only; `merge_live` already supplements segment id from runtime.
- `crates/tui/src/main.rs`: selected live row attaches via socket override before restore fallback.
- `crates/tui/src/multi_pod.rs`: also uses `PodList`, so ordering effects should be checked.
- `crates/pod/src/discovery.rs`: List/Attach/Restore behavior is related but out of scope.
- `crates/pod-registry/src/table.rs`: runtime allocation segment id source.
- `crates/pod-store/src/lib.rs`: pending active segment metadata; do not persist runtime supplementation.
Implementation phases:
1. Change `PodList::from_sources` sorting to reachable-live first, then updated_at desc, then pod_name asc; truncation remains after sorting.
2. Make reachable live pending preview explicit, e.g. `[live, pending segment]`, when durable summary is incomplete.
3. Preserve and test runtime segment id supplementation for display/debug ids only.
4. Add focused `pod_list` tests for live-first-before-truncation, live pending runtime segment attach-only behavior, and live-only runtime segment attach-only behavior.
5. Adjust existing sort/multi-pod tests only as needed.
6. Keep `PodDiscovery::inspect` / `AttachOrRestorePod` behavior out of scope; record follow-up if needed.
Critical risks:
- Live attachability and restoreability must stay separate.
- Do not persist runtime segment supplementation to pod-store.
- Sort must happen before truncation.
- Do not duplicate picker-specific merge/sort logic; fix shared `PodList`.
- Rank reachable live rows, not unreachable registry allocations.
- Preview wording must not imply restoreability.
- Multi-Pod dashboard ordering may change; reviewer should check it remains intended.
Validation plan:
- `cargo test -p tui pod_list`
- `cargo test -p tui picker`
- `cargo test -p tui multi_pod`
- `cargo test -p tui`
- `cargo fmt --check`
---
<!-- event: review author: hare at: 2026-05-30T05:00:32Z status: approve -->
## Review: approve
Approve.
The change correctly moves the live-priority rule into shared `PodList` construction, so both the resume picker and multi-Pod dashboard consume the same merged/sorted model. Reachable live Pods now sort ahead of non-live/unreachable/stopped/corrupt rows before truncation, and live pending rows get display-only runtime segment supplementation plus clearer pending preview text without changing pod-store metadata or restore behavior.
Blocker findings: none.
Requirement coverage:
- Reachable live rows sort before stopped/corrupt/unreachable rows before truncation.
- Sorting remains deterministic inside groups: `updated_at` desc, then pod name asc.
- Live pending/runtime-only rows remain attachable/openable but not restorable.
- Runtime segment id supplementation is display/model-only; no pod-store write path is touched.
- Pending preview uses `[live, pending segment]` and does not imply restoreability.
- Shared `PodList` was fixed rather than duplicating picker-specific logic.
- Unreachable registry allocations are not promoted.
- PodDiscovery / AttachOrRestore behavior was not broadened.
Validation reviewed from coder report:
- `cargo test -p tui pod_list` — passed.
- `cargo test -p tui picker` — passed.
- `cargo test -p tui multi_pod` — passed.
- `cargo test -p tui` — passed.
- `cargo fmt --check` — passed.
Final verdict: approve.
---
<!-- event: close author: hare at: 2026-05-30T05:00:56Z status: closed -->
## Closed
---
id: 20260527-000016-tui-picker-live-pending-pods
slug: tui-picker-live-pending-pods
title: TUI picker: live pending Pod の表示優先と状態補完
status: closed
kind: task
priority: P2
labels: [migrated]
created_at: 2026-05-27T00:00:16Z
updated_at: 2026-05-30T05:00:56Z
assignee: null
legacy_ticket: tickets/tui-picker-live-pending-pods.md
---
## Migration reference
- legacy_ticket: tickets/tui-picker-live-pending-pods.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI picker: live pending Pod の表示優先と状態補完
## 背景
`tui -r` の Pod picker は session store の name-keyed Pod metadata と runtime registry の live allocation を合わせて表示している。しかし、spawned child Pod がまだ最初の user turn / SegmentStart を materialize していない場合、Pod metadata は pending segment のままになり、session log も存在しない。
実例として、`impl-llm-worker-stream-continuation` は live socket と runtime registry 上の segment_id を持っていたが、metadata は以下のように `session_id` のみだった。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"active": {
"session_id": "019e5bc6-c3f3-7193-98a1-d64c635f86a1"
}
}
```
一方で runtime 側には segment_id が存在する。
```json
{
"pod_name": "impl-llm-worker-stream-continuation",
"segment_id": "019e5bc6-c3f3-7193-98a1-d6559bdc9cd6",
"state": "idle"
}
```
この状態の Pod は attach 可能だが、session log がないため `updated_at = 0` になり、picker の `updated_at desc` sort と `MAX_ROWS = 10` truncate によって一覧から漏れやすい。
## 方針
Live socket が reachable な Pod は、session log / metadata active segment が未確定でも attach 可能な対象として picker に表示する。restore 可能性と attach 可能性を分け、live pending Pod は restore 不能でも live attach 対象として扱う。
## 要件
- `tui -r` picker は reachable live Pod を stopped Pod より優先して表示する。
- `updated_at = 0` でも live row が `MAX_ROWS` truncate で落ちない。
- sort key は少なくとも live first, updated_at desc, pod_name になる。
- Live Pod の metadata が pending segment の場合でも picker row に表示する。
- preview は `[live, pending segment]` など、人間が状態を理解できる文言にする。
- debug id 表示では runtime registry の segment_id を可能なら表示する。
- Runtime registry / live status に segment_id があり、metadata に segment_id が無い場合、表示上は runtime segment_id を補完できるようにする。
- ただし session log が存在しない限り restore 可能とは扱わない。
- attach は live socket に対して行う。
- Existing stopped / corrupt Pod metadata rows の表示を壊さない。
- `ListVisiblePods` / discovery 側にも同様の pending live 表示不整合がある場合、必要なら後続 ticket に切り出す。
- この ticket の主対象は `tui -r` picker。
## 完了条件
- live pending Pod が `tui -r` に表示される。
- live pending Pod を選択すると live socket に attach する。
- live pending Pod が多数の stopped Pod によって `MAX_ROWS` truncate から漏れない。
- picker の sort / row build の unit test が追加または更新されている。
- `cargo fmt --check` と `cargo test -p tui picker` あるいは関連 TUI test が通る。
## 範囲外
- pending Pod metadata を runtime segment_id で永続的に書き換えること。
- session log が無い Pod を restore 可能にすること。
- spawned child Pod の first turn / SegmentStart materialization 方針の変更。
- 汎用 spawned Pod panel UI。
---
-78
View File
@@ -1,78 +0,0 @@
---
title: "TUI: spawned child Pod の一覧と一時 attach"
state: "closed"
created_at: "2026-05-27T00:00:17Z"
updated_at: "2026-06-07T03:14:39Z"
---
## Migration reference
- legacy_ticket: tickets/tui-spawned-pod-panel.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: spawned child Pod の一覧と一時 attach
## 背景
insomnia の開発では、親 Pod が複数の実装 Pod / reviewer Pod を spawn し、並列に作業させる運用が増えている。現在、spawned child の状態確認や出力確認は主に tool (`ListPods`, `ReadPodOutput`, `SendToPod`, `StopPod`) 経由で行っているが、TUI 上では親 Pod の会話と child Pod の進捗を行き来しにくい。
ネイティブ GUI は将来的には便利だが、現時点で必要なタスクではない。まず TUI のまま、現在の Pod が spawn した child Pod を一覧し、一時的に attach / view できる UI を用意したい。
## Prerequisite
- `20260528-141602-tui-pod-list-view-abstraction`
This ticket should build on the shared TUI Pod list/view abstraction instead of introducing a separate child-Pod-specific list model. The child panel may specialize the source/visibility to current-parent spawned children, but row status, reachability diagnostics, attach target representation, selection, and refresh behavior should reuse the prerequisite abstraction.
## 要件
- TUI 上で、現在の Pod が spawn した child Pod を一覧できる。
- source は spawned child registry / Pod state persistence を使う。
- ホスト上の全 Pod を無条件に見せる UI にはしない。
- current parent から見える child Pod だけを対象にする。
- 各 child row には最低限以下を表示する。
- pod name
- alive / stopped / unreachable などの状態
- delegated scope の概要
- 最終更新時刻または最終出力時刻(取得できる範囲)
- 未読出力の有無または最終 assistant text preview(可能なら)
- TUI から child Pod に一時 attach / view できる。
- 親 Pod の TUI を完全に終了せず、child の履歴 / streaming 出力を確認できる。
- 戻る操作で親 Pod view に戻れる。
- 最小実装では read-only view でもよい。child へ入力を送る操作は後続でもよい。
- child view 中でも、どの Pod を見ているか視覚的に分かる。
- status line / title / breadcrumb など。
- child が stopped / unreachable の場合は明確に表示し、attach 失敗を診断する。
- 既存 tool の `ListPods` / `ReadPodOutput` / `SendToPod` / `StopPod` の意味を変えない。
- visibility は parent-child 関係に基づけ、Pod discovery の global list と混ぜない。
## 操作案
詳細 keybinding は実装時に確定する。
候補:
- command mode から `:pods` で child Pod list を開く。
- list 上で Enter すると child view へ一時 attach。
- `Esc` / `b` / command で parent view へ戻る。
- child view から `:send` などで入力する機能は後続 ticket にしてよい。
## 完了条件
- 親 Pod の TUI で spawned child Pod の一覧を表示できる。
- live child Pod を選択すると、その child の snapshot / streaming output を TUI 上で確認できる。
- parent view に戻れる。
- stopped / unreachable child は一覧上で状態が分かり、attach 失敗が診断される。
- ホスト全 Pod ではなく、parent から見える child Pod だけが対象である。
- `cargo fmt --check`
- `cargo check --workspace`
- `cargo test -p tui -p pod -p protocol`
## 範囲外
- ネイティブ GUI クライアント。
- 複数 Pod view の同時分割表示。
- child Pod への full interactive input。
- child Pod の自動再起動。
- host-wide Pod browser。
- Pod discovery tool の visibility model 変更。
-3
View File
@@ -1,3 +0,0 @@
Closed as intentionally not planned.
The old migrated spawned-Pod panel idea has been superseded by the workspace panel, Pod list/open/attach behavior, Ticket role launching, and the local role session registry. The remaining direction is not to revive this standalone spawned-child panel ticket. Future panel work should be tracked through the newer workspace panel / orchestration tickets.
-39
View File
@@ -1,39 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:17Z -->
## Migrated
Migrated from tickets/tui-spawned-pod-panel.md. No legacy review file was present at migration time.
---
<!-- event: decision author: hare at: 2026-06-05T04:03:38Z -->
## Decision
Decision: deprioritize this ticket for the current multi-agent system direction.
Current need is not a TUI panel for spawned Pods. The priority is Ticket-driven intake/routing: making Tickets a code-facing durable orchestration record, then exposing Ticket operations to Intake/Orchestrator through a typed backend/tool surface.
This ticket is not closed as technically invalid; it is moved out of the active multi-agent implementation path. Revisit only if direct child Pod visibility/attach UI becomes a concrete UX requirement.
---
<!-- event: state_changed author: hare at: 2026-06-07T03:14:39Z from: intake to: done reason: closed field: workflow_state -->
## State changed
Ticket closed; workflow_state set to done.
---
<!-- event: close author: hare at: 2026-06-07T03:14:39Z status: closed -->
## Closed
Closed as intentionally not planned.
The old migrated spawned-Pod panel idea has been superseded by the workspace panel, Pod list/open/attach behavior, Ticket role launching, and the local role session registry. The remaining direction is not to revive this standalone spawned-child panel ticket. Future panel work should be tracked through the newer workspace panel / orchestration tickets.
---
@@ -1 +0,0 @@
{"id":"orch-plan-20260610-090202-1","ticket_id":"00001KSKBPSJG","kind":"accepted_plan","accepted_plan":{"summary":"Implement the model setup wizard as an explicit one-shot CLI path, not normal Pod startup: add `yoi setup-model` that launches a setup TUI. The wizard should select a bundled model/provider entry, optionally accept an auth hint/reference when the provider requires one, and persist a user default Profile by updating the user Profile registry under the normal config root (`profiles.toml` plus a generated user Profile Lua file such as `profiles/default.lua`). It must not write workspace `.yoi`, session history, Ticket files, runtime/local/secret-like files, or start/attach a Pod during setup. Existing normal launch semantics remain unchanged except that subsequent default startup can use the persisted user default Profile.","branch":"tui-model-setup-wizard","worktree":"/home/hare/Projects/yoi/.worktree/tui-model-setup-wizard","role_plan":"Coder implements in `.worktree/tui-model-setup-wizard` with write scope limited to the child worktree. Orchestrator keeps Ticket/progress records in the main workspace. Reviewer will be delegated after coder report."},"author":"orchestrator","at":"2026-06-10T09:02:02Z"}
-99
View File
@@ -1,99 +0,0 @@
---
title: "TUI: ユーザーマニフェストのモデル設定 wizard"
state: 'closed'
created_at: "2026-05-27T00:00:18Z"
updated_at: '2026-06-10T09:31:45Z'
queued_by: 'yoi ticket'
queued_at: '2026-06-10T07:59:32Z'
---
## Migration reference
- legacy_ticket: tickets/tui-user-model-setup.md
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# TUI: ユーザーマニフェストのモデル設定 wizard
## 背景
spawn UI(`tickets/tui-pod-spawn-ui.md`)が `[model]` を user / project の cascade レイヤから取る前提なので、初回起動のユーザーは事前に `~/.config/insomnia/manifest.toml` を手で書く必要がある。catalog(`crates/provider/src/catalog.rs`)に provider / model の一覧と `AuthHint`(API key の env 名や Codex OAuth 等の認証方式)が既に揃っているので、これを使って TUI 内で対話的にセットアップできるようにする。
`provider::catalog` の公開 API:
- `load_providers() -> Vec<ProviderEntry>`: builtin + user override マージ済み
- `load_models() -> Vec<ModelEntry>`: 同上
- `ProviderEntry`: `id` / `display_name` / `scheme` / `auth_hint` 等
- `ModelEntry`: `id` / `provider` / `capability`
- `AuthHint`: `None` / `ApiKey { env: Option<String> }` / `CodexOAuth`
これらが「UI で何を選ばせ、何を聞くか」を直接ガイドしてくれる構造になっている。
## 要件
### 起動経路
- 専用サブコマンド `tui setup-model`(仮)として alt-screen TUI で起動する
- 引数なしで叩くと既存の spawn flow に入るので、それとは別の入口
### Wizard フロー
1. **provider 選択**: `load_providers()` の結果をリスト表示。`display_name` を見せ、上下キー + Enter で選択
2. **model 選択**: 選んだ provider の `id` で `load_models()` をフィルタしてリスト表示。1 つだけならスキップ可
3. **認証情報入力**: 選んだ provider の `auth_hint` で分岐
- `None` → スキップ
- `ApiKey { env: Some(name) }` → 「環境変数 `<name>` を使う」または「key ファイルパスを入力」を選ばせる
- `ApiKey { env: None }` → key ファイルパス入力(絶対パス推奨、ホーム展開はする)
- `CodexOAuth` → 「`codex login` で OAuth を済ませてください」案内 + `~/.codex/auth.json` の存在チェック
4. **確認画面**: 書き込み内容のプレビュー(生成される TOML)を表示、Enter で確定 / Esc でキャンセル
5. **書き込み**: `~/.config/insomnia/manifest.toml`(または `$XDG_CONFIG_HOME` 配下、`manifest::user_manifest_path()`)に `[model]` を書く
### 書き込みフォーマット
catalog 由来なので `ref` 形式を採用する:
```toml
[model]
ref = "<provider_id>/<model_id>"
[model.auth]
kind = "api_key"
file = "/abs/path/to/key"
```
`AuthHint::None` の場合は `[model.auth]` を省く。`CodexOAuth` の場合は `kind = "codex_oauth"`。
### 既存ファイルの扱い
`~/.config/insomnia/manifest.toml` が既に存在する場合:
- `[model]` セクションが無い → 末尾に追加
- `[model]` セクションが既にある → 上書き確認を出す(既存の値をプレビュー表示してから)
- ファイル全体が壊れた TOML → エラー表示してキャンセル
### キャンセル / エラー経路
- どのステップでも Esc / Ctrl-C で抜けられる。書き込み前ならファイルは触らない
- catalog 読み込み失敗 / ファイル書き込み失敗は alt-screen 内でエラー表示してから終了
## 設計で決めること
- **API key ファイルパスの入力 UX**: テキスト入力欄でフリーフォーム、補完なしで良いか、`~` / `$HOME` 展開するか
- **環境変数で済ませる選択肢の見せ方**: ApiKey で env 指定がある場合、デフォルト「env を使う」かデフォルト「key ファイルを使う」か
- **多 provider / 多 model 時の選択 UI**: シンプルな縦リストか、検索フィルタ付きか
- **既存 `[model]` の上書き確認の粒度**: TOML 全体 diff か、変わるキーだけハイライトか
## 完了条件
- `tui setup-model` サブコマンドで wizard が起動する
- catalog から provider / model 一覧を取って表示・選択できる
- `AuthHint` の各バリアントに対応した入力 UI が動く
- 確定すると `~/.config/insomnia/manifest.toml` に `[model]` が書き込まれる
- 既存ファイルの `[model]` 上書き時は確認が出る
- セットアップ後に spawn flow(引数なし `tui` 起動)が model resolve エラー無しで Pod を spawn できる
## 範囲外
- catalog 自体の編集(新規 provider / model の追加)UI。`providers.toml` / `models.toml` の手書き運用は維持
- 複数モデル設定(`[compaction.model]` 等)の wizard 化
- project manifest (`.insomnia/manifest.toml`) への書き込み。本チケットは user 層のみ
- spawn flow からの自動誘導(model 不在検出時に「`m` で setup wizard を起動」分岐)。本チケット完了後に spawn UI 側で別途検討
-27
View File
@@ -1,27 +0,0 @@
完了しました。
実施内容:
- `yoi setup-model` を top-level command として追加しました。
- setup path は通常の Pod 起動/attach/session 復元とは分離され、選択した catalog-backed model を user config 配下の Profile 設定として保存します。
- `profiles.toml` の default selector と `[profile.default]`、および generated `profiles/default.lua` を deterministic に書きます。
- setup 実行中に workspace `.yoi`、Ticket、session、runtime/local/secret-like files は書きません。
- `yoi --help` に `yoi setup-model` を表示します。
- `package.nix` cargoHash も更新しました。
Merge:
- Branch: `tui-model-setup-wizard`
- Merge commit: `021661b5 merge: setup model wizard`
確認:
- Branch-local reviewer `reviewer-tui-model-setup-wizard` が approve。
- `cargo fmt --check` passed。
- `git diff --check` passed。
- `cargo test -p tui setup_model --lib` passed。
- `cargo test -p yoi setup_model --bin yoi` passed。
- `cargo check -p yoi` passed。
- `target/debug/yoi ticket doctor` passed。
- typed `TicketDoctor` は 0 errors / 3 pre-existing diagnostics。
- `nix build .#yoi` passed。
残作業:
- なし。将来的に richer alt-screen setup UI に発展させる余地はありますが、本 Ticket の one-shot setup command / Profile persistence 要件は満たしています。
-307
View File
@@ -1,307 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:18Z -->
## Migrated
Migrated from tickets/tui-user-model-setup.md. No legacy review file was present at migration time.
---
<!-- event: decision author: ticket-intake at: 2026-06-08T07:29:01Z -->
## Decision
## Intake refinement: current Yoi context
This is an existing migrated Ticket; no duplicate Ticket was created. The original body remains useful for the desired wizard shape, but several migrated assumptions are stale and must be treated as superseded where they conflict with current Yoi code and project decisions.
### Current request snapshot
Add an interactive TUI setup flow that helps a first-time user choose a provider/model from the provider catalog and persist a user-level default model configuration so a normal fresh `yoi` spawn can resolve a model without manual TOML editing.
### Binding decisions / invariants
- Product entrypoint is the installed `yoi` binary, not an old standalone `tui`/`insomnia` binary. The CLI surface should be chosen under the `yoi` CLI owner boundary; the migrated `tui setup-model` spelling is only historical/placeholder text.
- Current config paths use `manifest::paths::config_dir()` with default `$XDG_CONFIG_HOME/yoi` / `$HOME/.config/yoi`, not `~/.config/insomnia`.
- Normal reusable runtime configuration is Profile-oriented. The implementation must decide, with preflight, whether this wizard writes/updates `profiles.toml`, a profile-local model fragment, or another explicit user config surface; it must not silently reintroduce the removed ambient manifest-cascade model.
- Current catalog auth hints are `AuthHint::None`, `AuthHint::ApiKey`, `AuthHint::SecretRef { ref_ }`, and `AuthHint::CodexOAuth`; the migrated `ApiKey { env: Option<String> }` flow is stale.
- Secret values must not be written into Ticket bodies, logs, diagnostics, or generated artifacts. Prefer the existing local secret-store / `yoi keys` boundary for normal provider credentials; raw `model.auth.file` remains a low-level explicit-file source, not the default UX if a safer secret-ref path is available.
- The wizard must be cancel-safe: no user config/secret writes before explicit confirmation, and failed parsing/writing must leave existing config usable.
### Implementation latitude
- The exact command name may be settled during preflight, but should fit existing `yoi` CLI semantics and help text.
- A simple vertical provider/model list is sufficient for the first implementation; search/filtering can be deferred unless preflight finds the catalog size makes it necessary.
- If only one model exists for the selected provider, skipping the model-choice step is acceptable.
- Preview may show the generated/surgical config change rather than a full diff, as long as overwrite of an existing model/default is explicit.
### Acceptance criteria
- A first-time user can launch the setup flow from the `yoi` CLI without entering normal Pod spawn by accident.
- The flow loads current `provider::catalog::load_providers()` and `load_models()` data, displays provider/model choices, and handles all current `AuthHint` variants.
- The confirmed result persists a user-level default model/profile configuration at the current Yoi config path, without storing plaintext secrets in config by default.
- Existing user config with an existing model/default is detected and requires overwrite confirmation; malformed config is reported and not rewritten.
- Esc/Ctrl-C cancel before confirmation leaves files unchanged.
- After setup, a normal fresh `yoi` spawn can resolve the selected model/profile without a model-resolve error.
- Validation includes focused Rust tests for CLI parsing/config rendering/update behavior and `nix build .#yoi` because this changes CLI/TUI/runtime resources/packaging-visible code.
### Readiness / routing signal
- readiness: spike_needed
- needs_preflight: true
- risk_flags: [cli-ux, profiles-config, secrets, auth-boundary, migration-staleness, tui]
This Ticket is ready for Orchestrator routing to preflight/spike, not direct implementation. Preflight should first settle the current user-config write target and command spelling, then either update the Ticket body or record a concise binding decision before implementation.
---
<!-- event: intake_summary author: ticket-intake at: 2026-06-08T07:29:10Z -->
## Intake summary
Updated existing Ticket 20260527-000018-tui-user-model-setup in place; no duplicate was created. The migrated request is now clarified as a Yoi CLI/TUI first-run model setup flow, with stale `tui`/`insomnia`/old AuthHint assumptions explicitly superseded in the thread. Routing readiness is spike/preflight, not direct implementation: first settle current `yoi` command spelling and the user-level config write target for Profile-oriented model defaults, then implement the wizard. needs_preflight=true; risk_flags=[cli-ux, profiles-config, secrets, auth-boundary, migration-staleness, tui].
---
<!-- event: state_changed author: ticket-intake at: 2026-06-08T07:29:10Z from: intake to: ready reason: intake_ready field: workflow_state -->
## State changed
Intake clarification completed for the existing Ticket. The Ticket is ready for Orchestrator routing to preflight/spike; implementation should not begin until the preflight decisions called out in the intake summary are recorded.
---
<!-- event: state_changed author: "yoi ticket" at: 2026-06-10T07:59:32Z from: ready to: queued reason: queued field: state -->
## State changed
Ticket を `yoi ticket` が queued にしました。
---
<!-- event: decision author: hare at: 2026-06-10T07:59:32Z -->
## Decision
Human authorized Queue from workspace panel notification; Orchestrator read the Ticket and will accept before implementation side effects.
---
<!-- event: state_changed author: "yoi ticket" at: 2026-06-10T07:59:32Z from: queued to: inprogress reason: cli_state field: state -->
## State changed
State changed to `inprogress`.
---
<!-- event: decision author: hare at: 2026-06-10T07:59:32Z -->
## Decision
Accepting implementation after workspace inspection. Expected overlap with prompt-resource cleanup is low, so route in parallel in a dedicated worktree.
---
<!-- event: plan author: orchestrator at: 2026-06-10T09:02:02Z -->
## Plan
Routing decision: implementation_ready
Reason:
- Ticket is already `inprogress`; relation query and orchestration-plan query show no blockers.
- Existing thread marked this as needing a small preflight. Bounded code/context check resolved the implementation-shaping decisions without needing another planning round.
Evidence checked:
- Ticket body/thread/artifacts for `00001KSKBPSJG`.
- Relation records: none.
- Orchestration plan records: none before this routing pass.
- Current worktree/branch state: `.worktree/tui-model-setup-wizard` exists and has no implementation commit yet.
- Current CLI surface in `crates/yoi/src/main.rs` includes top-level `panel`, `keys`, `pod`, `ticket`, `objective`, `session`, `memory lint`; setup is not yet present.
- Profile/config surface in `crates/manifest/src/paths.rs` and `crates/manifest/src/profile.rs`; active reusable Profiles are Lua-first with user registry/config under the normal config root.
- Provider/model catalog resources under `resources/providers` and `resources/models`.
Binding decisions / invariants:
- Add an explicit one-shot setup entry point `yoi setup-model`; it must not run normal Pod startup, create sessions, attach sockets, or spawn Pods while configuring.
- Persist the result as a user default Profile through normal Profile mechanisms: user `profiles.toml` plus a generated user Profile Lua file (for example `profiles/default.lua`) under the normal config root. Do not write workspace `.yoi`, Ticket records, session history, runtime/local/secret-like files, or project records from the setup wizard.
- Do not introduce legacy manifest authority or new environment-variable configuration surfaces.
- Keep existing startup/profile semantics intact; the setup wizard only creates/updates config that normal startup already knows how to consume.
- If provider credential handling needs more than selecting/recording an existing auth hint/ref, escalate rather than inventing a new secret store flow.
Implementation latitude:
- Exact TUI layout and internal state machine organization are up to coder, bounded by the one-shot setup and persistence invariants.
- Coder may choose the generated profile name/path if it is deterministic, user-config scoped, and unambiguous from the default selector.
- Coder may keep the catalog/model choice set modest and testable for the first implementation.
Validation:
- Focused CLI/parser and setup persistence tests.
- Focused TUI/setup module tests where practical.
- `cargo fmt --check` or `cargo fmt`, `git diff --check`, focused cargo tests, and broader `cargo check`/`nix build .#yoi` before merge because this touches CLI/TUI/config/package source surfaces.
Escalate if:
- The implementation requires changing Profile registry semantics, secret-store behavior, normal Pod launch behavior, or workspace `.yoi` authority.
- Credential entry/storage cannot be limited to an existing explicit auth reference/hint.
---
<!-- event: plan author: orchestrator at: 2026-06-10T09:08:59Z -->
## Plan
Routing update: blocked_by_dependency_or_missing_authority
Reason:
- This Ticket remains `inprogress` and has an accepted implementation plan for `.worktree/tui-model-setup-wizard`, but the current Orchestrator process cannot delegate write scope to the child worktree.
- Attempted `SpawnPod` for `coder-tui-model-setup-wizard` with write scope limited to the child worktree failed: requested scope `/home/hare/Projects/yoi/.worktree/tui-model-setup-wizard` is not within the spawner effective scope.
- Retrying with broader `/home/hare/Projects/yoi` write scope also failed for the same effective-scope reason.
- Direct file write to the child worktree through the available tool scope is read-only, so the Orchestrator cannot safely implement the Ticket in this session either.
Evidence checked:
- Ticket body/thread/artifacts and relation/orchestration-plan records.
- Current CLI/profile/provider code map was boundedly inspected and the accepted plan was recorded.
- Worktree `.worktree/tui-model-setup-wizard` exists, but no coder was spawned and no implementation files were changed.
Next action:
- Continue this Ticket from a Pod/session with delegated write scope for `.worktree/tui-model-setup-wizard`, or explicitly re-route/clean up the existing inprogress worktree.
- Do not treat this as planning uncertainty; the current blocker is write/delegation authority for implementation side effects.
---
<!-- event: implementation_report author: orchestrator at: 2026-06-10T09:16:45Z -->
## Implementation report
Implementation report
Branch/worktree: `tui-model-setup-wizard` / `.worktree/tui-model-setup-wizard`
Commits:
- `6bb023e9 merge develop into setup wizard worktree` (brought branch up to current `develop` before implementation)
- `32be6075 feat: add setup model command`
Summary:
- Added a top-level `yoi setup-model` command that enters a one-shot setup path separate from normal Pod startup.
- Added `tui::setup_model` to list catalog-backed models/providers, prompt for a default selection, and persist user Profile config under the normal user config directory.
- Persistence writes `profiles.toml` with `default = "user:default"` and `[profile.default] path = "profiles/default.lua"`, plus generated `profiles/default.lua` using the selected model ref.
- The setup path does not start/attach a Pod, create sessions, or write workspace `.yoi` records.
- Added CLI parser tests for `setup-model` and persistence tests for generated profile config.
Validation run in branch:
- `cargo fmt`
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi parse_setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `git diff --check` passed.
Notes:
- `nix build .#yoi` was not run in the branch yet; Orchestrator should run it before merge because this touches CLI/TUI/config/package source surfaces.
- The implementation uses a simple bounded terminal setup flow rather than broad TUI refactoring.
---
<!-- event: review author: reviewer-tui-model-setup-wizard at: 2026-06-10T09:29:42Z status: approve -->
## Review: approve
Branch-local review verdict: approve
Blockers: none.
Reviewer confirmed after fixes:
- `package.nix` cargoHash was updated and `nix build .#yoi` passed.
- Top-level help now lists `yoi setup-model`.
- Tracked worktree is clean.
Validation run by reviewer:
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `git diff --check $(git merge-base HEAD develop)..HEAD` passed.
- `nix build .#yoi` passed.
This is branch-local review evidence; final main-branch approval/close belongs to merge-completion.
---
<!-- event: review author: orchestrator at: 2026-06-10T09:31:33Z status: approve -->
## Review: approve
Main-branch review/merge-completion approval.
Verified before merge:
- Branch-local reviewer approved after blocker fix.
- Merge target matched branch `tui-model-setup-wizard` / worktree `.worktree/tui-model-setup-wizard` and commits `6bb023e9`, `32be6075`, `66d6bf2e`, `c06817b4`.
- Packaging blocker was fixed by updating `package.nix` cargoHash; top-level help lists `yoi setup-model`.
Merged:
- `git merge --no-ff tui-model-setup-wizard -m "merge: setup model wizard"`
- Merge commit: `021661b5 merge: setup model wizard`
Post-merge validation:
- `cargo fmt --check` passed.
- `git diff --check` passed.
- `cargo test -p tui setup_model --lib` passed.
- `cargo test -p yoi setup_model --bin yoi` passed.
- `cargo check -p yoi` passed.
- `target/debug/yoi ticket doctor` passed.
- typed `TicketDoctor` reported 0 errors and 3 pre-existing diagnostics.
- `nix build .#yoi` passed.
Result: approve.
---
<!-- event: state_changed author: orchestrator at: 2026-06-10T09:31:33Z from: inprogress to: done reason: merged_and_validated field: state -->
## State changed
Merged branch `tui-model-setup-wizard` with merge commit `021661b5`; branch-local review approved after fixes and post-merge validation passed (`cargo fmt --check`, `git diff --check`, `cargo test -p tui setup_model --lib`, `cargo test -p yoi setup_model --bin yoi`, `cargo check -p yoi`, `target/debug/yoi ticket doctor`, `nix build .#yoi`).
---
<!-- event: state_changed author: hare at: 2026-06-10T09:31:45Z from: done to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-10T09:31:45Z status: closed -->
## 完了
完了しました。
実施内容:
- `yoi setup-model` を top-level command として追加しました。
- setup path は通常の Pod 起動/attach/session 復元とは分離され、選択した catalog-backed model を user config 配下の Profile 設定として保存します。
- `profiles.toml` の default selector と `[profile.default]`、および generated `profiles/default.lua` を deterministic に書きます。
- setup 実行中に workspace `.yoi`、Ticket、session、runtime/local/secret-like files は書きません。
- `yoi --help` に `yoi setup-model` を表示します。
- `package.nix` cargoHash も更新しました。
Merge:
- Branch: `tui-model-setup-wizard`
- Merge commit: `021661b5 merge: setup model wizard`
確認:
- Branch-local reviewer `reviewer-tui-model-setup-wizard` が approve。
- `cargo fmt --check` passed。
- `git diff --check` passed。
- `cargo test -p tui setup_model --lib` passed。
- `cargo test -p yoi setup_model --bin yoi` passed。
- `cargo check -p yoi` passed。
- `target/debug/yoi ticket doctor` passed。
- typed `TicketDoctor` は 0 errors / 3 pre-existing diagnostics。
- `nix build .#yoi` passed。
残作業:
- なし。将来的に richer alt-screen setup UI に発展させる余地はありますが、本 Ticket の one-shot setup command / Profile persistence 要件は満たしています。
---
-57
View File
@@ -1,57 +0,0 @@
---
title: "ワークスペースのメモリーをLintするヘッドレスCLI"
state: "closed"
created_at: "2026-05-27T00:00:19Z"
updated_at: "2026-05-31T02:15:17Z"
---
## Background
The memory linter currently exists as library/pre-write validation used by memory tools, but there is no headless command to check all existing workspace memory/knowledge records at once. This makes it hard to validate `.insomnia/memory` and `.insomnia/knowledge` before commits, migrations, or manual edits.
The installed user-facing binary is currently produced by the `tui` crate as `insomnia`. It is acceptable for this ticket to add the headless lint command to that crate/binary instead of introducing a separate binary. A future rename from `tui` crate to `insomnia`, or a more explicit single-binary CLI structure, can be handled separately.
## Requirements
- Add a headless CLI mode to the existing `insomnia` binary in the `tui` crate.
- Preferred invocation shape: `insomnia memory lint [--workspace <PATH>] [--json] [--warnings-as-errors]`.
- `insomnia memory` without `lint` should remain available as a normal positional Pod name if possible.
- If this shape is awkward with the current parser, keep the command unambiguous and document the chosen shape in tests/help text.
- Default workspace root is the current working directory.
- `--workspace <PATH>` overrides the workspace root passed to `memory::WorkspaceLayout::new`.
- Lint all existing records classified by `memory::WorkspaceLayout`:
- `.insomnia/memory/summary.md` when present;
- `.insomnia/memory/decisions/*.md`;
- `.insomnia/memory/requests/*.md`;
- `.insomnia/knowledge/*.md`.
- Do not lint subsystem-owned opaque trees such as `.insomnia/memory/_staging`, `_logs`, `_usage`.
- Use the existing `memory::Linter` and `WriteMode::Update` for existing files so the CLI matches tool pre-write validation semantics without triggering create-only duplicate slug checks on the file itself.
- Print a deterministic, human-readable report by default:
- file path;
- errors;
- warnings;
- summary counts.
- Exit status:
- `0` if no errors, and no warnings when `--warnings-as-errors` is set;
- `1` if lint errors are found, or warnings are found with `--warnings-as-errors`;
- `2` for CLI usage / I/O / unexpected runtime failures.
- `--json` may be simple but should be machine-readable and stable enough for scripts: include workspace, files, errors, warnings, and counts.
- The command must not start a Pod, connect to sockets, enter raw terminal mode, or mutate files.
## Non-goals
- Renaming the `tui` crate to `insomnia`.
- Adding a separate installed binary.
- Linting Workflow files; workflow linting can be a future command.
- Auto-fixing memory/knowledge records.
- Changing memory schema/linter rules.
## Acceptance criteria
- `insomnia memory lint` runs headlessly against the current directory and reports existing memory/knowledge lint results.
- `insomnia memory lint --workspace <PATH>` works in tests/fixtures.
- The command exits non-zero for lint errors.
- `--warnings-as-errors` makes warnings fail.
- `--json` returns valid JSON containing counts and per-file diagnostics.
- Existing Pod/TUI argument parsing behavior remains covered by tests, especially positional Pod names and `--multi`/`--resume` conflicts.
- `cargo fmt --check`, focused `cargo test -p tui` tests, `cargo check -p tui`, `./tickets.sh doctor`, and `git diff --check` pass.
-1
View File
@@ -1 +0,0 @@
Implemented `insomnia memory lint` as a headless command in the existing user-facing `insomnia` binary. The command lints workspace memory/knowledge records with the existing `memory::Linter` using `WriteMode::Update`, supports human and JSON output, handles warnings-as-errors, preserves `insomnia memory` as a positional Pod name, and returns before TUI/raw-terminal or Pod connection paths. External review approved and validation passed.
-105
View File
@@ -1,105 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:19Z -->
## Migrated
Migrated from TODO.md entry without a legacy ticket file. No legacy review file was present at migration time.
---
<!-- event: plan author: hare at: 2026-05-31T00:51:55Z -->
## Plan
Planning note:
- Keep this in the existing user-facing `insomnia` binary implemented by the `tui` crate. Do not add another installed command for this ticket.
- The command should be headless: parse args, lint files, print report, exit. It must not initialize terminal UI or connect to a Pod.
- `insomnia memory lint` is preferred, but `insomnia memory` alone should continue to be a valid Pod-name attach/create path if practical with the current parser.
- Use `memory::Linter` directly so CLI behavior tracks tool pre-write validation. Existing files should be linted with `WriteMode::Update`.
- Keep crate rename / single-binary architecture as future cleanup, not part of this ticket.
---
<!-- event: implementation_report author: hare at: 2026-05-31T02:14:28Z -->
## Implementation report
Implementation report from coder Pod `workspace-memory-lint-coder-20260531`:
- Branch: `workspace-memory-lint-cli`
- Commit: `7a717f2d259563df562913e0c3ceb388b094b697` (`cli: add workspace memory lint`)
- Added `insomnia memory lint [--workspace <PATH>] [--json] [--warnings-as-errors]` as a headless mode in the existing `tui` crate/user-facing `insomnia` binary.
- `insomnia memory` alone remains a positional Pod name.
- The lint command resolves workspace root, collects existing summary/decisions/requests/knowledge records through `memory::WorkspaceLayout`, and lints with existing `memory::Linter` using `WriteMode::Update`.
- The command prints deterministic human output by default and stable JSON with workspace/files/errors/warnings/counts when `--json` is requested.
- Exit codes follow the ticket: 0 clean, 1 lint failures or warnings-as-errors, 2 usage/I/O/output/runtime failures.
- The headless path returns before raw terminal setup or Pod connection/spawn logic.
Validation reported by coder:
- `cargo fmt --check` passed
- `cargo test -p tui memory_lint -- --nocapture` passed
- `cargo test -p tui` passed
- `cargo check -p tui` passed
- `./tickets.sh doctor` passed
- `git diff --check` passed
Unresolved issues: none.
---
<!-- event: review author: hare at: 2026-05-31T02:14:28Z status: approve -->
## Review: approve
External review by reviewer Pod `workspace-memory-lint-reviewer-rerun-20260531`: approve.
The original reviewer Pod `workspace-memory-lint-reviewer-20260531` became non-visible to the parent before output could be recovered; this review was rerun with a replacement read-only reviewer Pod.
Reviewer summary:
- The implementation adds `insomnia memory lint` as a headless mode in the existing user-facing `insomnia` binary.
- The memory lint path branches before raw terminal setup and Pod connection/spawn logic.
- Parser tests preserve `insomnia memory` as positional Pod name behavior.
- The collector targets summary, decisions, requests, and knowledge records while ignoring opaque memory subsystem directories and workflow files.
- Existing `memory::Linter` and `WriteMode::Update` are used, and the code only reads files / writes reports.
- Human and JSON outputs are deterministic enough for the ticket, and exit code mapping matches requirements.
Blockers: none.
Non-blocking follow-ups:
- Add broader fixture coverage for `_staging`, `_usage`, knowledge, and decisions if desired.
- Add process-level exit-code integration tests if a CLI test harness is introduced later.
Validation adequacy: coder-reported validation is sufficient for this ticket. Reviewer additionally checked `git diff --check develop...HEAD` read-only.
---
<!-- event: implementation_report author: hare at: 2026-05-31T02:15:16Z -->
## Implementation report
Main workspace validation after merge:
- `cargo fmt --check` passed
- `cargo test -p tui memory_lint -- --nocapture` passed (10 passed)
- `cargo test -p tui` passed (224 passed)
- `cargo check -p tui` passed with pre-existing dead-code warnings in `llm-worker` and `tui`
- `./tickets.sh doctor` passed
- `git diff --check` passed
---
<!-- event: close author: hare at: 2026-05-31T02:15:17Z status: closed -->
## Closed
Implemented `insomnia memory lint` as a headless command in the existing user-facing `insomnia` binary. The command lints workspace memory/knowledge records with the existing `memory::Linter` using `WriteMode::Update`, supports human and JSON output, handles warnings-as-errors, preserves `insomnia memory` as a positional Pod name, and returns before TUI/raw-terminal or Pod connection paths. External review approved and validation passed.
---
-62
View File
@@ -1,62 +0,0 @@
---
title: "Generalize system-reminder history append lane"
state: "closed"
created_at: "2026-05-27T00:00:20Z"
updated_at: "2026-05-29T05:05:43Z"
---
## Background
`session-todo-reminder` established the first concrete `<system-reminder>...</system-reminder>` user: Task inactivity reminders are appended through `pending_history_appends` so the reminder is persisted in `worker.history` before the next LLM request. This follows the context-processing rule that new non-volatile input must be appended to history rather than injected only into request context.
The current implementation should now be generalized so future reminder producers do not each hand-roll XML tags, `SystemItem` construction, source labeling, cooldown/priority plumbing, or history-append integration.
This ticket is about making the system-reminder append lane a small typed facility. It is not about adding new reminder policies beyond existing Task reminders.
## Requirements
- Introduce a typed internal representation for pending system reminders.
- text/body
- source/kind, e.g. task inactivity
- optional priority/order key if needed
- helper that renders the body inside `<system-reminder>...</system-reminder>` exactly once
- Route reminders through the existing `Interceptor::pending_history_appends` lane.
- The final result must still be `Item::System(SystemItem { kind: InvokeKind::SystemReminder, ... })` or equivalent current protocol type.
- The reminder must be appended to `worker.history`; do not introduce hidden request-only context injection.
- Refactor `session-todo-reminder` to use this typed helper/facility.
- Task reminder behavior, thresholds, cooldown, and tests should remain unchanged.
- The helper should prevent double-wrapping if the body is already tagged, or the API should make double-wrapping impossible.
- Keep `Notify` / `PodEvent` behavior unchanged.
- Do not merge raw notify and system reminder semantics.
- If they share buffering mechanics, keep the public behavior and rendered tags distinct.
- Keep ordering deterministic.
- If multiple reminder producers are added later, ordering should be explicit or stable.
- For now, existing Task reminder order relative to Notify/PodEvent should be preserved unless there is a clear reason to change it.
- Add docs/comments near the facility explaining the rule:
- system reminders are durable input and must be appended through history.
- they are not transient UI notices.
- they are not prompt-cache/context-only injections.
## Acceptance criteria
- There is a typed system-reminder helper/facility rather than ad-hoc string construction in Task reminder code.
- Task inactivity reminders still appear as `<system-reminder>...</system-reminder>` in `pending_history_appends` output.
- The helper emits `InvokeKind::SystemReminder` / current system-reminder item kind.
- Existing Task reminder tests continue to pass.
- New focused tests cover:
- rendering wraps body once.
- source/kind is retained or observable where appropriate.
- Task reminder uses the helper and remains history-append based.
- no hidden context-only injection path is introduced.
- `cargo fmt --check`
- `cargo check -p pod -p llm-worker -p session-store`
- Relevant focused tests, e.g. `cargo test -p pod reminder --no-default-features`.
## Out of scope
- Adding a second reminder policy.
- Changing Task reminder thresholds/cooldown.
- Changing Notify/PodEvent user-visible behavior.
- UI actionbar notices.
- Prompt text changes.
- Generic notification center or reminder scheduling service.
-69
View File
@@ -1,69 +0,0 @@
---
id: 20260527-000020-system-reminder-injection-generalization
slug: system-reminder-injection-generalization
title: Generalize system-reminder history append lane
status: closed
kind: task
priority: P2
labels: [pod, llm-worker, history, system-reminder]
created_at: 2026-05-27T00:00:20Z
updated_at: 2026-05-29T05:05:43Z
assignee: null
legacy_ticket: null
---
## Background
`session-todo-reminder` established the first concrete `<system-reminder>...</system-reminder>` user: Task inactivity reminders are appended through `pending_history_appends` so the reminder is persisted in `worker.history` before the next LLM request. This follows the context-processing rule that new non-volatile input must be appended to history rather than injected only into request context.
The current implementation should now be generalized so future reminder producers do not each hand-roll XML tags, `SystemItem` construction, source labeling, cooldown/priority plumbing, or history-append integration.
This ticket is about making the system-reminder append lane a small typed facility. It is not about adding new reminder policies beyond existing Task reminders.
## Requirements
- Introduce a typed internal representation for pending system reminders.
- text/body
- source/kind, e.g. task inactivity
- optional priority/order key if needed
- helper that renders the body inside `<system-reminder>...</system-reminder>` exactly once
- Route reminders through the existing `Interceptor::pending_history_appends` lane.
- The final result must still be `Item::System(SystemItem { kind: InvokeKind::SystemReminder, ... })` or equivalent current protocol type.
- The reminder must be appended to `worker.history`; do not introduce hidden request-only context injection.
- Refactor `session-todo-reminder` to use this typed helper/facility.
- Task reminder behavior, thresholds, cooldown, and tests should remain unchanged.
- The helper should prevent double-wrapping if the body is already tagged, or the API should make double-wrapping impossible.
- Keep `Notify` / `PodEvent` behavior unchanged.
- Do not merge raw notify and system reminder semantics.
- If they share buffering mechanics, keep the public behavior and rendered tags distinct.
- Keep ordering deterministic.
- If multiple reminder producers are added later, ordering should be explicit or stable.
- For now, existing Task reminder order relative to Notify/PodEvent should be preserved unless there is a clear reason to change it.
- Add docs/comments near the facility explaining the rule:
- system reminders are durable input and must be appended through history.
- they are not transient UI notices.
- they are not prompt-cache/context-only injections.
## Acceptance criteria
- There is a typed system-reminder helper/facility rather than ad-hoc string construction in Task reminder code.
- Task inactivity reminders still appear as `<system-reminder>...</system-reminder>` in `pending_history_appends` output.
- The helper emits `InvokeKind::SystemReminder` / current system-reminder item kind.
- Existing Task reminder tests continue to pass.
- New focused tests cover:
- rendering wraps body once.
- source/kind is retained or observable where appropriate.
- Task reminder uses the helper and remains history-append based.
- no hidden context-only injection path is introduced.
- `cargo fmt --check`
- `cargo check -p pod -p llm-worker -p session-store`
- Relevant focused tests, e.g. `cargo test -p pod reminder --no-default-features`.
## Out of scope
- Adding a second reminder policy.
- Changing Task reminder thresholds/cooldown.
- Changing Notify/PodEvent user-visible behavior.
- UI actionbar notices.
- Prompt text changes.
- Generic notification center or reminder scheduling service.
-84
View File
@@ -1,84 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:20Z -->
## Migrated
Migrated from TODO.md entry without a legacy ticket file. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-29T05:05:43Z status: closed -->
## Closed
---
id: 20260527-000020-system-reminder-injection-generalization
slug: system-reminder-injection-generalization
title: Generalize system-reminder history append lane
status: closed
kind: task
priority: P2
labels: [pod, llm-worker, history, system-reminder]
created_at: 2026-05-27T00:00:20Z
updated_at: 2026-05-29T05:05:43Z
assignee: null
legacy_ticket: null
---
## Background
`session-todo-reminder` established the first concrete `<system-reminder>...</system-reminder>` user: Task inactivity reminders are appended through `pending_history_appends` so the reminder is persisted in `worker.history` before the next LLM request. This follows the context-processing rule that new non-volatile input must be appended to history rather than injected only into request context.
The current implementation should now be generalized so future reminder producers do not each hand-roll XML tags, `SystemItem` construction, source labeling, cooldown/priority plumbing, or history-append integration.
This ticket is about making the system-reminder append lane a small typed facility. It is not about adding new reminder policies beyond existing Task reminders.
## Requirements
- Introduce a typed internal representation for pending system reminders.
- text/body
- source/kind, e.g. task inactivity
- optional priority/order key if needed
- helper that renders the body inside `<system-reminder>...</system-reminder>` exactly once
- Route reminders through the existing `Interceptor::pending_history_appends` lane.
- The final result must still be `Item::System(SystemItem { kind: InvokeKind::SystemReminder, ... })` or equivalent current protocol type.
- The reminder must be appended to `worker.history`; do not introduce hidden request-only context injection.
- Refactor `session-todo-reminder` to use this typed helper/facility.
- Task reminder behavior, thresholds, cooldown, and tests should remain unchanged.
- The helper should prevent double-wrapping if the body is already tagged, or the API should make double-wrapping impossible.
- Keep `Notify` / `PodEvent` behavior unchanged.
- Do not merge raw notify and system reminder semantics.
- If they share buffering mechanics, keep the public behavior and rendered tags distinct.
- Keep ordering deterministic.
- If multiple reminder producers are added later, ordering should be explicit or stable.
- For now, existing Task reminder order relative to Notify/PodEvent should be preserved unless there is a clear reason to change it.
- Add docs/comments near the facility explaining the rule:
- system reminders are durable input and must be appended through history.
- they are not transient UI notices.
- they are not prompt-cache/context-only injections.
## Acceptance criteria
- There is a typed system-reminder helper/facility rather than ad-hoc string construction in Task reminder code.
- Task inactivity reminders still appear as `<system-reminder>...</system-reminder>` in `pending_history_appends` output.
- The helper emits `InvokeKind::SystemReminder` / current system-reminder item kind.
- Existing Task reminder tests continue to pass.
- New focused tests cover:
- rendering wraps body once.
- source/kind is retained or observable where appropriate.
- Task reminder uses the helper and remains history-append based.
- no hidden context-only injection path is introduced.
- `cargo fmt --check`
- `cargo check -p pod -p llm-worker -p session-store`
- Relevant focused tests, e.g. `cargo test -p pod reminder --no-default-features`.
## Out of scope
- Adding a second reminder policy.
- Changing Task reminder thresholds/cooldown.
- Changing Notify/PodEvent user-visible behavior.
- UI actionbar notices.
- Prompt text changes.
- Generic notification center or reminder scheduling service.
---
-21
View File
@@ -1,21 +0,0 @@
---
title: "Bashツールがファイル編集に常用されている問題をdesciptionで抑制"
state: "closed"
created_at: "2026-05-27T00:00:21Z"
updated_at: "2026-05-31T22:36:34Z"
---
## Migration reference
- legacy_ticket: null
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Bashツールがファイル編集に常用されている問題をdesciptionで抑制
## Background
This work item was migrated from an unfinished TODO.md entry that did not have a dedicated legacy ticket file.
## Acceptance criteria
- Define the concrete requirements before implementation.
-1
View File
@@ -1 +0,0 @@
Closed without implementation for now. Current Bash tool description already nudges agents toward Read/Edit/Glob/Grep over shell-based file edits, and this is not urgent enough to carry as an active work item. If the behavior becomes a recurring problem, reopen as a focused prompt-description polish ticket covering Bash child processes such as cat/tee/sed/perl/python rewrites.
-16
View File
@@ -1,16 +0,0 @@
<!-- event: migration author: tickets.sh-migration at: 2026-05-27T00:00:21Z -->
## Migrated
Migrated from TODO.md entry without a legacy ticket file. No legacy review file was present at migration time.
---
<!-- event: close author: hare at: 2026-05-31T22:36:34Z status: closed -->
## Closed
Closed without implementation for now. Current Bash tool description already nudges agents toward Read/Edit/Glob/Grep over shell-based file edits, and this is not urgent enough to carry as an active work item. If the behavior becomes a recurring problem, reopen as a focused prompt-description polish ticket covering Bash child processes such as cat/tee/sed/perl/python rewrites.
---
-109
View File
@@ -1,109 +0,0 @@
---
title: "Nix profile entrypoints that resolve to portable Pod manifests"
state: "closed"
created_at: "2026-05-27T00:00:22Z"
updated_at: "2026-05-29T17:45:59Z"
---
## Migration reference
- legacy_ticket: null
- migrated_from: TODO.md / tickets directory migration on 2026-05-27
# Nix profile entrypoints that resolve to portable Pod manifests
## Background
This work item was migrated from an unfinished TODO.md entry:
> 事前定義したManifestをProfile的に扱い、Orchestrator/Coder/Researcherで別々のモデル/設定を使わせる運用ができるようにする
The current manifest cascade is good at configuration defaults by location: built-in defaults, user manifest, workspace manifest, and explicit overlays. That is less suitable for operational role selection. Users want to choose between profiles such as Orchestrator, Coder, Researcher, Reviewer, or cheap/fast variants, and they want those profiles to be portable as a pure artifact rather than assembled implicitly from several ambient layers.
Another problem is authoring ergonomics. The current manifest exposes many low-level numeric parameters that require implementation-specific intuition, such as compaction thresholds, pruning protection sizes, memory thresholds, and feature-specific token limits. Profiles should let users express high-level intent and reusable presets while the resolver produces the precise runtime manifest.
## Related work
- `work-items/open/20260529-145355-manifest-profile-encrypted-secrets/item.md`: profiles should integrate with explicit encrypted secret references so API keys/tokens are not limited to process environment variables.
## Design direction
Use Nix as the default human-authored profile format. A profile is a Nix expression that produces the final Pod manifest/configuration artifact through an Insomnia-provided `mkProfile` / `mkManifest` style library.
The profile itself is the source of truth. Commonality, imports, role presets, and any cascade-like behavior should be expressed in Nix by the profile author instead of being implemented as an additional ambient manifest cascade in Insomnia.
The runtime boundary should be:
```text
selected Nix profile + explicit startup inputs
=> deterministic resolved manifest/config snapshot
=> Pod runtime
```
Do not introduce a three-layer authoring model where Nix generates TOML profiles that then merge into TOML manifests. That would make manifest/profile/Nix ownership unclear and hard to operate. Rust should consume the resolved artifact, ideally as a typed JSON/config representation, and preserve a snapshot for Pod restore.
## Requirements
- Add a Nix-based profile entrypoint as the default path for new Pod creation.
- Provide an Insomnia Nix library with `mkProfile` / `mkManifest` helpers.
- The helper should produce a pure resolved manifest/config artifact that Rust can deserialize and validate.
- Profile authors may use Nix imports/functions to share common settings, implement their own cascade, or build role presets.
- Treat the resolved manifest/config as the runtime contract.
- Persist the selected profile identity/source and the resolved snapshot in Pod/session metadata.
- Pod resume should prefer the saved resolved snapshot, not silently re-evaluate the Nix profile.
- Re-evaluating a profile for an existing Pod must be explicit because it may change model, tools, permissions, or thresholds.
- Move role-oriented authoring into profiles.
- Support profiles for roles such as Orchestrator, Coder, Researcher, Reviewer, and cost/performance variants.
- Profiles should be able to select model/provider settings, prompts, tools, permissions, memory behavior, web/search behavior, workflows, skills, and context/compaction strategy.
- Prefer semantic presets in the Nix library for values that are difficult to tune by raw numbers, e.g. context budget, compaction behavior, retention, autonomy, and tool policy.
- Keep raw low-level numeric overrides available as an advanced escape hatch, not the primary user-facing interface.
- Shrink ambient cascade to discovery/default selection rather than runtime config merging.
- User/project configuration may provide profile registries, aliases, defaults, and UI preferences.
- User/project configuration should not be required as intermediate runtime override layers for model IDs, compaction thresholds, or other behavior controlled by the selected profile.
- Existing TOML manifest cascade can remain as compatibility/debug/test infrastructure, but it should not be the main profile design.
- Add profile discovery and selection UX.
- New Pod creation UI should show a selectable profile field such as `profile: coder (default)`.
- The profile picker should list built-in/user/project/explicit profiles with enough source/default information to avoid ambiguity.
- CLI/TUI should support explicit profile selection by name/source and by path/flakeref where appropriate.
- Ambiguous profile names should fail closed or require source-qualified selection rather than being implicitly merged.
- Keep secrets as references, not plaintext values.
- Nix profiles may refer to credentials using typed secret references, e.g. `secrets.ref "brave.search.default"`.
- Nix evaluation output, resolved config serialization, diagnostics, session logs, and model context must not contain plaintext secrets.
- Secret dereferencing/decryption happens in Rust at the consumer boundary.
- Define compatibility and fallback behavior.
- `--manifest` / TOML manifest loading may continue to work for compatibility, tests, fixtures, and low-level debugging.
- If Nix is unavailable, diagnostics should clearly say that profile resolution requires Nix and point to the manifest/resolved-config fallback path.
- Existing manifest behavior should not be broken until the Nix profile path is implemented and documented.
## Open design points
- Exact Nix entrypoint shape:
- flake output names, e.g. `insomniaProfiles.<name>` / `profiles.<name>`
- path-based profiles, e.g. `.insomnia/profiles/coder/profile.nix`
- whether both are supported initially
- Exact Rust-facing artifact:
- JSON resolved config vs TOML manifest snapshot vs a new typed `ResolvedPodConfig`
- whether `PodManifest` remains the final runtime type or becomes the legacy/compatibility representation
- Profile registry/default storage:
- where user-level profile aliases live
- where project-level defaults live
- how built-in profiles are exposed
- How much Nix support is external-command based initially vs embedded/library-integrated later.
- How profile summaries are generated for the new Pod UI without exposing low-level internals or secrets.
## Acceptance criteria
- A Nix profile can be selected when creating a new Pod and resolves to the complete runtime manifest/config for that Pod.
- Insomnia provides a documented `mkProfile` / `mkManifest` Nix helper for producing a valid resolved profile artifact.
- Profile authors can share common settings and implement cascade-like composition in Nix without relying on ambient user/project manifest merging.
- New Pod UI includes profile selection and displays the effective default, e.g. `profile: coder (default)`.
- CLI/TUI profile selection supports at least one explicit path/flakeref flow and one discovered-name/default flow.
- Resolved profile artifacts are validated with clear diagnostics before Pod creation.
- Pod/session metadata persists the selected profile identity/source and the resolved snapshot.
- Pod resume uses the persisted resolved snapshot unless the user explicitly asks to reload/re-resolve the profile.
- Secret references are preserved as references through Nix evaluation and resolved config; plaintext secrets are not written to config snapshots, logs, diagnostics, or model context.
- Existing TOML manifest path remains available as a compatibility/debug/test path during the migration.
- Documentation explains the new profile model, why ambient cascade is no longer the primary runtime config mechanism, and how users should structure reusable Nix profiles.
- Focused tests cover Nix profile resolution, validation errors, profile default/source selection, ambiguity handling, snapshot persistence, and no-plaintext secret serialization paths.
- `cargo fmt --check`
- Relevant manifest/profile/pod/tui tests pass.

Some files were not shown because too many files have changed in this diff Show More