[DO NOT MERGE] Org project view on the org routes: dev branch for Theo and Marcus - #8464
Draft
mzxchandra wants to merge 38 commits into
Draft
mzxchandra wants to merge 38 commits into
mzxchandra wants to merge 38 commits into
Conversation
Projects are the logged-in user's real workspaces; chats, workflows, files, tables, knowledge bases, logs and integrations come from the workspace's own React Query hooks and open the real pages. The side chat and new-chat home run the real Sim Chat over useChat, with a syncChatUrl option so the panel keeps its own URL. Dashboards render real dashboard files live plus a built-in Runs dashboard from the logs stats route. Issues and Changelog stay mock through per-project overlay packs matched by workspace name, and issue resource chips resolve to the real resource with the same name. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… into next release A pack now matches on the workspace's workflow names before its name, so the demo project picks up its pack whatever the workspace is called. The next-release card received the project id it was already using. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…t description The message handed from the home composer is sent one tick after the side chat mounts, with cleanup, so a simulated remount no longer withdraws it. The settings General page uses the same description line as the project header. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The pack is chosen from the workspace's workflow names, which load after the workspace list, so an issue route now shows a loading state until the list arrives instead of calling notFound on the fallback pack. The needs-you badge waits the same way, and the draft chart's release index points at its last value. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rg integrations page Packs no real workspace claims stay in the sidebar as mock projects with their prototype chats, rows and sample dashboards; real hooks stay off for them. A real workspace nothing claims shows only its real resources. Connectors renders the organization integrations component the way the org route does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A fork lineage is one project: the sidebar lists its root, the project header shows the current environment (Prod, Staging, Sandbox, from a trailing word on the workspace name or the fork depth) beside "Open full view", and a dropdown switches to another environment on the same section. Connectors resolves the organization the way the app entry does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ents section Moves the fork-lineage resolution the playground computed into lib/projects so the workspace sidebar and the organization surface can share it. Registers the org-project-view feature flag (fallback ORG_PROJECT_VIEW) and passes it through every FeatureFlagsProvider. Adds the Environments chip to the project main view with a placeholder tab. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… and mappings One card per environment with the real fork, sync and disconnect actions, resource sub-tabs in the sync view's kind order (exported from use-fork-sync so the order cannot drift), and a grid with one row per resource and one column per environment that joins the per-edge pull mappings by resource id. Cells edit through the real mapping route. Mock projects show an example grid. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e, Changelog per environment Real projects' Build links and "Open full view" go to /workspace/<id>/... and the prototype's build/* rendering only remains for mock projects. The overlay pack is resolved once per lineage root so every environment shares its issues; the changelog shows shipped releases on Prod, the draft next release on Staging and running work on Sandbox. The mock entities now sit behind a ProjectSources interface with the packs moved to fixtures/ and an empty implementation for the graduated surface. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d org-project-view The real sidebar's hidden services (search data, global commands, chat events, search and help modals) move into a shared hook and modals component so both sidebars mount them. With the flag on, the workspace layout mounts the project Build sidebar (back chip to the project, environment chip that switches lineages, flat Project and Build links, chats, footer) and /workspace/<id>/w renders a foldered Workflows list with search, New workflow and the row actions the old tree offered, instead of redirecting to the first canvas. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…s, env chip everywhere, credential marks Project rows get hover actions, a context menu (open, copy link, rename, pin, delete), inline rename across the lineage, drag reorder (a per-browser order until it moves server-side) and pinned-first sorting. New chat uses a compose icon (SquarePen, new in the icon set). The Build sidebar's environment chip always opens its dropdown and ends with Manage environments. The Environments grid leads credential rows with the provider mark of the youngest environment that still holds the credential. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The org view's footer is now the shared account and help footer: clicking your name opens Settings (the organization's settings) and Sign out, and help offers docs, Slack and support. The fork modal takes an optional list of sources; the Environments tab passes the lineage, so Create fork can start from Prod, Staging or Sandbox, with the default name and resource list following the chosen source. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…icker; Search matches the org surface New chat now renders the organization Home from the product, with its Build, Plan and Search switch, suggestions and org chats. The only addition is the project picker: with a project picked, a Build message opens that project's chat. The org Home gains three optional props for this (a per-mode heading and accessory, a before-send hook, and the existing flag that keeps chat URLs in place); its default behavior is unchanged. Search renders the organization Search page, as the org surface does. The separate Assistant page and nav item are removed: the product has no such destination, search is a mode of Home. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…view With org-project-view on, the canvas gets a breadcrumb bar (Workflows, its folders, the workflow) whose crumbs return to the Workflows index at that folder, plus a Search resources action that opens the search modal. Replaces the sidebar tree's job of showing where the open workflow lives. Flag off: unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…g-project-view
The prototype leaves /playground/org for the real routes. With the flag on:
- /o/<org>/home is the product's Home plus the project picker.
- The org sidebar lists Projects (one per fork lineage, with their chats and the row menu,
rename, pin and drag) in place of Workspaces, and Home reads as New chat.
- /o/<org>/p/<workspaceId>/{dashboard,changelog,issues,environments} is the project main
view: real dashboards and Runs, the Environments tab, and empty states for Changelog and
Issues until those entities exist.
- The Build sidebar's back chip and project links point at the org project routes.
With the flag off the org surface is unchanged. The playground shell, its fixtures and the
mock-only pieces are deleted.
The workflow location bar mounts from the canvas page instead of its layout, and reads the
workflow through the list query options and opens search through the global command, so the
layout's module graph stays at its baseline (it had grown by about 1,150 modules).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…verlay The comparison engine now reports which loop and parallel fields changed and which blocks entered or left a container, and exposes the field lists and a shared hasChanges helper. A new overlay module merges two workflow states into one canvas: removed blocks, containers and edges ride along as ghosts at their old positions (nudged clear of live cards), deleted condition and router branches stay on the surviving card so their ghost edge keeps a handle, and every edge is classified by canonical port key. The renderer edge view gains a quiet ghost style for those removed connections. (cherry picked from commit 0a1717d)
The preview canvas accepts per-block and per-edge diff status: added and modified cards get a ring and a shared status label, removed cards and containers fade to a ghost, changed sub-block rows and sentence chips tint, and ghost edges sit under live ones so a rewired port shows the new line on top. (cherry picked from commit 463603c)
Side-by-side view of two workflow states: the overlaid canvas on the left and a change list on the right, sharing selection. Each touched block is a collapsible card with the app's block tile; modified blocks show field rows as folded line diffs with word marks, item-by-item list diffs for tools, conditions, routes and input fields, old to new pairs for scalars, and only the fact for secrets. Added and removed blocks show every field diffed against nothing, with long one-sided bodies capped behind one expander. Fork comparisons group credentials, picked resources and trigger paths into a muted environment bindings section. (cherry picked from commit d5dc867)
The deploy modal offers "View changes" (live against the draft) when a redeploy is pending and a "Compare" action on every version row, opening a full-width comparison whose two sides are pickable from the header. The draft state hook is shared with change detection and only subscribes while something to compare against exists. (cherry picked from commit 609c81b)
The synced deployed workflows list gets a "View changes" action per row. A new internal route and fork use case return the target as its editor holds it and the source deployment re-keyed into the target's block ids through the fork block map (or the derived id the sync would assign), with condition and route ids and variable ids aligned, so the two sides diff block for block like two versions of one workflow. (cherry picked from commit b02ec19)
Comparison: keep basic/advanced mode changes visible, include a tool's permission, server and implementation fields in list diffs, include input field defaults, read checkbox records as records, show whitespace-only edits, cap word and line diffing so a pathological prompt cannot stall the pane, slot deleted branches back at their old position, never reuse a ghost edge id, and mask secret-looking keys at any depth (including key/value table rows) with a name-based fallback when a block definition is unknown. Change list: memoized cards that only re-render when their own selection changes, nested cards for blocks inside an added or removed container, a shared sign map, muted tokens that exist, hover and focus treatment, scroll edge fades, and a shared skeleton for both hosts. Fork preview: the before side is the target draft the sync overwrites, read in one snapshot and scoped to the target workspace; variables and their assignments are re-keyed by unique name; a create reports no target id; the change rows are a discriminated union; the query key sits under the fork diff keys so a sync invalidates it; a direction switch closes the preview. (cherry picked from commit 90b0089)
…ew gaps - Fork "View changes" now loads only the previewed workflow: its deployed state, its identity mapping, its target row and its block pairs, instead of every deployed state in the source workspace plus the full promote plan. The plan item comes from the same buildForkPromotePlanItems decision the promote uses. The route gets a per-user rate limit. - Word marks give up past 64 edits per line pair, so many long rewritten lines cannot stall the tab. - Agent tool params that their block marks as password fields are masked whatever their name. - A list item whose label changed but whose body did not is no longer flagged as a masked value change. - Hoist double casts under their annotations, make sourceWorkflowId optional on the wire for rollout, lazy-load both diff modals, and re-record the settings module baseline: the block registry the diff canvas needs is reached only through the lazy chunk opened on click. (cherry picked from commit b610b2c)
(cherry picked from commit 43feafc)
- Sync details load each replaced target's draft and diff it against the projected source, using the same projection and "has changes" rule as the per-workflow preview, so a row and its preview never disagree. Rows the sync would not change read "No changes" and offer no comparison. - Preview buttons wait until the list matches the selected direction. - Mask JSON-encoded secrets in text and scalar fields, and say "A masked value changed" when masking hides the only difference. - Show role changes on agent messages, highlight a router's changed Context on the canvas, and keep ghost edges under live ones into containers. - Added or removed loops and parallels list their iteration settings. - Size ghost containers the way the preview draws them. - "Order changed" only when items moved; CRLF and CR read as line breaks; collapsing unchanged lines closes every fold; selecting a nested block opens its container card; the version pickers have distinct names. - Drop redundant mock resets flagged by check:test-patterns. (cherry picked from commit 0f55477)
- The sync list's per-workflow change check measures the target drafts in one query first and skips itself past the fork state limit, then reads drafts a few at a time and drops each after comparing, instead of holding them all. - Mask keys with a secret word anywhere in them (secretAccessKey, aws_secret_access_key) while credential references stay readable. - Inline diffs show whitespace-only changes. - Opened folds reset when the compared bodies change. - Ghost collision boxes use the canvas's own block measurement. (cherry picked from commit 2a3e35f)
…ection per comparison - Agent message bodies go through the same masking as other text fields. - The sync change check's size guard counts block outputs and data, not only sub-blocks. - Picking another version clears the block selection. (cherry picked from commit a1f6f07)
…comes, not mock calls - Key the comparison view by the picked version pair instead of resetting on state identity, so live draft updates no longer clear the selection. - Agent message changes hidden by masking say so, like other fields. - Fork preview tests assert results, with mocks that answer only the right arguments, instead of asserting mock calls. (cherry picked from commit 9a18b8e)
…ists on both sides (cherry picked from commit 5c28dd5)
(cherry picked from commit 64529e4)
…s Environments tab The Environments tab becomes a pipeline flowing toward the root (Sandbox, Staging, Prod). Each fork edge has a connector: how many deployed workflows its sync would change, a line drawn like a running workflow edge (arrowhead as a marker on the same path, the canvas's execution pulse travelling the way changes flow), and a split button. Review promotion is the default; the chevron turns it into Review refresh and reverses the edge. Reviewing an edge shows what that sync ships below the pipeline: its changed workflows, each opening the side-by-side comparison from the fork sync preview, and Sync, which confirms the overwrite with the same modal the workspace fork settings use. - The execution pulse moves into @sim/workflow-renderer as ExecutionPulse, shared by the canvas edge and the pipeline edge. - The sync overwrite confirm moves out of the fork settings page into ForkSyncConfirmModal. - The tool-registry page-weight baseline is re-recorded for the comparison view's growth.
… Search becomes a composer mode Chats are organization-wide and can span projects, so the org sidebar no longer lists chats under each project. Every chat sits in the Chats section, and with org-project-view on each row leads with the marks of the projects it worked in. - The chat list returns workspaceIds per chat: its own workspace plus every workspace its resources live in, aggregated in SQL. It stands in for the chat's associated projects until the projects table records them directly. - With the flag on, Search leaves the sidebar and its page redirects to Home, where Search is already a mode of the composer alongside Build and Plan.
…kfill; composer polish Schema (0389): project (name, optional organization, so personal workspaces have projects too), project_workspace (a workspace's project, environment label and pipeline position; workspace_id unique) and copilot_chat_project (the projects a chat worked in). Backfill (script migration 0030_backfill_projects, resumable and idempotent): one project per fork lineage named after its root without the trailing environment word, owned by the root's organization; members labelled by their name's environment word or their depth; then each chat's projects from its own workspace and its resources' workspaces. Write paths keep every workspace in exactly one project: a new workspace gets its own project, a fork joins its parent's one step down, and disconnecting a fork moves it and its descendants into a new project named after it. Moving organization workspace chats to organization ownership is a separate script run by hand (db:move-workspace-chats-to-organizations, with --dry-run), because the workspace sidebar still lists chats by workspace; personal workspace chats keep their workspace owner. Composer, with org-project-view on: Search uses the same framed composer as Build and Plan and hides model, speed and effort; the mode switch leads the toolbar; Add resources opens on projects, each revealing its workspaces.
…ls are workspace names - GET /api/projects and PATCH /api/projects/[id] behind application operations - Build sidebar, add-resource menu and org sidebar read the projects table - chat rows mark the projects recorded in copilot_chat_project; new workspace chats record their workspace's project and forked chats copy their parent's - drop the environment column and the name parsing; hide a name that repeats its label
External collaborators are not organization members, so an organization chat would read as not found for them; their chats stay workspace-scoped.
An organization chat with no stored conversation mode reads as a search chat.
This branch had an error being 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.
Stacked on #8433 (
feat/org-project-view).What is here
The org project view now lives on the real organization surface instead of
/playground/org, entirely behind theorg-project-viewflag. With the flag off, the org surface is unchanged./o/<org>/home): the product's Home, with a project picker. Build with a project picked opens that project's chat; Search, Plan and "No project" behave exactly as today./o/<org>/p/<workspaceId>/{dashboard,changelog,issues,environments}): dashboard files and a Runs dashboard, the Environments tab for forks and resource mappings, and empty states for Changelog and Issues until those entities exist./workspace/<id>/...swaps its sidebar for the project Build sidebar,/workspace/<id>/wis a foldered Workflows page, and the canvas has a location bar.The playground prototype and its mock data are removed. Issues and Changelog plug in behind the empty states when the real entities land.
Running it locally
Set
ORG_PROJECT_VIEW=true, plusFORKING_ENABLED=trueandNEXT_PUBLIC_FORKING_ENABLED=truefor the Environments tab. Open/o/<org>/home.🤖 Generated with Claude Code