Repository navigation
Conversation
samuv
added this pull request to stack #1887
September 24, 2026 16:39
This was referenced Sep 24, 2026
samuv
force-pushed
the
impl/studio-chat-transcript-composer
branch
from
September 25, 2026 07:55
c5af275 to
541818c
Compare
Contributor
Implementation review: #1886CI is green. All 17 ACs are implemented. I found no XSS and no auto-send path:
Needs changes
Minor
|
samuv
force-pushed
the
impl/studio-chat-transcript-composer
branch
from
September 25, 2026 11:18
541818c to
3d244e9
Compare
Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Add confirmed arrival seeds, IME-safe send handling, responsive controls, bounded image previews, and speech recognition fallbacks with focused component proof. Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Validate each image and the prompt aggregate from decoded base64 byte counts before the BFF invokes the SDK. Pin exact 10 MiB, 20 MiB, and 16-image route boundaries, including rejection without SDK access. Signed-off-by: Samuele Verzi <samu@stacklok.com> Co-Authored-By: OpenAI Codex <codex@openai.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Hydrate cached transcripts after session reset, keep folder edits in memory when browser writes fail, and ignore stale return refreshes after visibility flips. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Drive the real generated BFF client through mounted workspace flows for send, queue, steer, retry, activity reattachment, bounded replay, gaps, and abrupt closes. Snapshot replayed prompt text before React applies batched row updates. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Use account-scoped reads and writes for profile, model, panel, canvas, and thread state. Enumerate thread keys through the quarantined view and ignore raw folder storage event payloads. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Adapt the account and mounted chat proofs after rebasing onto the merged auth recovery flow. The chat fixture now models a verified request state and provider context. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Keep profile scale behind the account reconciliation boundary and reset it before the next account workspace renders. The mounted account-switch proof plants Alice scale and verifies Bob sees the default after partial storage cleanup. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Assert that a model fork selects its returned BFF chat and that the remaining same-account queue hydrates after remount. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Describe the device theme as retained and account preferences as cleared on sign-out or account switch. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Use the declared happy-dom environment in affected component tests and remove unrelated Node type lockfile churn. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Refresh an idle visible transcript after inventory changes and on a bounded safety poll. Merge saved turns in order while retaining matching live detail and unique render anchors, with mounted and offline browser proof. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Recheck the shared account marker when reading, listing, or writing browser account data, including session-backed failed-run drafts. Keep storage-failure drafts in memory without touching another account's marked store. Signed-off-by: Samuele Verzi <samu@stacklok.com> Co-Authored-By: OpenAI Codex <codex@openai.com>
Keep legacy title revision zero out of the title cache, measure away time at visibility return, and allow a verified offline notice after failed chat refreshes. Show the target, model, mode, and draft tool access before sending a URL seed; keep large seeds in the original tab during interactive sign-in. Signed-off-by: Samuele Verzi <samu@stacklok.com> Co-Authored-By: OpenAI Codex <codex@openai.com>
Capture the hidden interval before asynchronous refetches so events received after return cannot be attributed to time away. Mount the event-to-notice seam and mutation-check result and approval timing. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Match saved image prompts by occurrence and MIME type so transcript-assigned names preserve the richer live row. Prove exactly-once prompts, images, and tools through mounted replay and refetch tests. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Exercise offline and busy seed confirmation through the workspace BFF and verify rename response, streamed title events, and stale inventory in the header and folder. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Detach stale tabs before session recheck, preserve marked peer data, and reconcile local and session storage by their markers. Signed-off-by: Samuele Verzi <samu@stacklok.com> Co-Authored-By: OpenAI Codex <codex@openai.com>
Match saved image rows by shared bytes or URL before consuming a live occurrence. Keep a preceding image from another client in recorded order while retaining the local attachment and its render details. Signed-off-by: Samuele Verzi <samu@stacklok.com> Co-Authored-By: OpenAI Codex <codex@openai.com>
Start speech recognition in the click gesture, then inspect microphone permission so browsers that omit a recognition error still leave Listening. Ignore late callbacks after stop or unmount while preserving the typed draft. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Samuele Verzi <samu@stacklok.com>
samuv
force-pushed
the
impl/studio-chat-transcript-composer
branch
from
September 25, 2026 12:24
3d244e9 to
86c6797
Compare
Contributor
Author
|
Addressed in this stacked implementation PR (head
Strict trace passes 17/17 ACs. Implementation PR CI, the performance gate, and a full CI dispatch on the same commit passed. The final panel reports |
peppescg
approved these changes
Sep 25, 2026
This was referenced Sep 25, 2026
Merged
2 tasks
jbeda
added a commit
that referenced
this pull request
Sep 25, 2026
…mit-coauthor-guidance * origin/main: (32 commits) docs: plan optional native Kubernetes execution provider (#1579) feat(mecatui): restore session status metrics (#1891) docs(plan): bound agent inventory viewport (#1946) docs: include user-docs in matlatl and use local documentation links (#1934) feat(mecatui): bound sessions inventory (#1944) feat(studio): show session delegation activity (#1907) docs(plan): define Studio session activity (#1885) Release TypeScript SDK v0.4.0 (#1940) Release v0.0.41 (#1941) docs(mecatui): plan bounded sessions inventory (#1906) feat(studio): add exact plan control and authorization review prerequisite (#1909) test(app): eliminate real ToolHive probe deadline wait (#1937) docs(plan): define Studio chat approvals and exact plan control (#1888) test(sdk): enforce SDK/TUI high-level parity (#1471) (#1917) docs(plan): propose SDK high-level parity coverage (#1471) (#1916) docs: improve gRPC schema table readability (#1842) test(app): eliminate real waits in durable learning tests (#1933) feat(studio): align chat transcript and composer (#1886) docs(plan): define Studio chat transcript and composer (#1880) feat: correlate provider requests with the root session (#1883) ...
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tracking: #1847
Summary
Stage: Implementation. This PR is stacked on the independent Plan / Interface PR #1880, which targets
main. It implements all seven scenarios and 17 criteria indocs/acceptance/studio-chat-transcript-composer.md: a flat streamed transcript with markdown, code, images and tool results; truthful message status; a responsive composer; image and voice input; model/mode selection; send, queue, steer, replay, cancel and retry; IME safety; seed prompts; title updates; same-tab return notices; and recorded scheduled-delivery notes with replies. Inline approvals (#1848), delegated activity (#1849), side panels (#1850), and MCP inventory (#1851) remain outside this PR.The stacked plan commit is
34e414c9011e0061b60eca62e4caf7df85900fc9after rebasing onorigin/mainc8d1c32d6e07574ab8980e7efbf007a6b4273195. #1880 remains unmerged, so there is no merged approved baseline; the directing human explicitly authorized this stacked implementation. The plan'slandedstatus in this branch is a proposed transition that becomes authoritative only after the implementation PR merges. Humans alone merge either PR.Interface conformance
Interfaces match the #1847 plan contract: Yes. ADR 0351 remains intact: browser requests use the same-origin BFF and generated Studio client; only the BFF calls the daemon through the published
@stacklok-oss/mecatl-sdk. Opaque BFF session IDs stay in chat URLs, BFF run IDs target controls, and SDK objects and credentials stay server-side. Daemon gRPC/protobuf, exported Go APIs, tool schemas, CLI/config, and therun.started | run.event | run.truncated | run.errorSSE union are unchanged.Additive BFF fields are
titleRevision/titleProvenanceon inventory and rename responses plus optional inertdeliveryannotations on canonical fenced user prompts; OpenAPI and the browser client are generated from source schemas. Image sending keeps the existing limits (16 images, 10 MiB each, 20 MiB decoded total) and selected-model capability gate. The BFF rejects excess before SDK access; the served CSP, auth, origin and CSRF gates remain in force. The arrivalsend=1link always requires an explicit Send click. A visible idle chat reconciles full saved turns, including another client's messages and a delivery's reply, without inventing durable message IDs.The directing human authorized a narrow amendment to already-landed Studio bootstrap AC4.6: clear unmarked
studio.account data on first sight after storage failure, while keeping marked same-account data and device theme. That amendment lives in Plan / Interface PR #1880 and is implemented here to satisfy #1847 AC4.3. There is no other #1847 interface deviation or ADR amendment. Account-scoped folders, per-session queues, failed prompts, profile/model/canvas/panel state and UI scale are quarantined on an account transition; a stale tab cannot clear another account's marked data while authentication is rechecked.Verification
task studio:checkpassed Biome, type checks, generated contract equality, 518 web tests and 169 server tests.task studio:build,CGO_ENABLED=0 task docs,task site:build, andtask ac-trace-strictpassed; strict trace resolves 17/17 chat ACs with zero failures.git diff --checkpassed.visible, so native tab hiding was not observed; fake-clock component and Playwright transitions cover the timing and refresh rules.34e414c9011e0061b60eca62e4caf7df85900fc9, Implementation PR CI and the performance gate at3d244e98cd8c317cdc2575ebe61c680d5e652141. The PR path classifier skipped repository-wide Go jobs for this Studio-scoped diff; the implementation run passed its Studio, documentation, and site checks, and the performance run passed its allocation gate and scenario comparisons.go run ./cmd/mecademopassed and showed a tool call, permission ask/approval, and final result. Repair panel: Spec, Standards, Security, Architecture and Library reuse found no issues; Test adequacy has one advisory for native tab visibility, and Duplication has one advisory for a custom React row comparator.PANEL: ship_blockers=0 important=0 advisory=2 reviewer_failures=0.Known limits
The existing stream marks scheduled origin-chat deliveries with canonical fenced text rather than authenticated event provenance. Byte-identical user text can receive the same inert note presentation; the plan records this and no stronger claim is made. The local mock does not advertise image sending or scheduling, so the built-browser image capability was enabled only for preview inspection; focused BFF/component tests cover sending and recorded note behavior. PDF/text-file sending, remote image embeds, persisted away markers, and cross-reload return notices are outside this contract.