Repository navigation
feat(tangent): manage a project's secrets in a Secrets window - #2941
Merged
Merged
Conversation
🎩 PreviewA preview build has been created at: |
This was referenced Oct 22, 2026
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 23, 2026 22:58
9086ffb to
954d167
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 23, 2026 23:50
954d167 to
49949eb
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
2 times, most recently
from
October 27, 2026 00:59
384ee3e to
7cba35a
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 27, 2026 17:33
7cba35a to
71dfa24
Compare
1 of 3 tasks
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 28, 2026 19:43
71dfa24 to
cfb14fb
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
3 times, most recently
from
October 29, 2026 19:45
fabc188 to
c23f7b9
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 29, 2026 20:21
c23f7b9 to
5e5915b
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 29, 2026 20:42
5e5915b to
78b74bd
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 29, 2026 23:33
78b74bd to
333d683
Compare
camielvs
commented
Oct 30, 2026
camielvs
commented
Oct 30, 2026
camielvs
commented
Oct 30, 2026
camielvs
commented
Oct 30, 2026
camielvs
commented
Oct 30, 2026
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
2 times, most recently
from
October 30, 2026 18:51
01fc4e0 to
26e05a3
Compare
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 30, 2026 20:35
26e05a3 to
dd28aec
Compare
camielvs
marked this pull request as ready for review
October 30, 2026 21:23
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 30, 2026 21:46
dd28aec to
348613b
Compare
maxy-shpfy
approved these changes
Oct 30, 2026
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
2 times, most recently
from
October 31, 2026 00:08
4e9eec3 to
3eaca13
Compare
Tangent's project dock gains a Secrets window when the project's workspace maps to a team. It lists the workspace's secrets, the ones runs in the project use when they act as the team. Your own secrets stay in Settings → Secrets. The copy calls the team the workspace. A team takes its workspace's name, and the workspace is what people know it by. - In a team's project the window is headed "Workspace: <workspace>" with the team id as its tooltip, and add, replace and delete act as the team. A member whose role can't write sees the list without those actions. Hiding them is the only guard, since the backend doesn't check write access on `/api/secrets/`. - A project whose workspace has no team has no workspace secrets, so it gets no Secrets window. The window opens once the team is known, so it never appears and then vanishes. - When the project has a team but you can't act as it (not a member, refused by the backend, or the lookup failed), the window says the workspace's secrets aren't available and why. It doesn't list your own secrets in their place, where they would pass for the workspace's. The add, replace and delete controls take an optional team id and invalidate that team's cache key. Their failure toasts now show the backend's reason, which matters once a request can be refused for acting as a team. From #2886: the dock registration and its order test, `ListRowIcon`, and the secret row's look. Replace and delete are inline buttons rather than a menu, so the row reuses the confirming delete button. Settings → Secrets stays your own secrets. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Feedback from the first staging pass. - A team's name, which is its workspace's, now carries the workspace icon wherever it's written into copy, with the team id on hover. `TeamName` does this, and the add dialog, the delete confirmation and the window's notice use it. Its 12px icon sits 0.1em below the baseline, which centres it on the capitals of both 12px and 14px text. `bold` sets the name in semibold and the icon at stroke 3, the weight that matches. The React Compiler covers `src/components/shared/Teams`, where it lives. - Deleting a workspace secret asks 'Delete shared secret "<name>"?' and says it's removed for the whole workspace, named in bold: "This removes the secret from the <workspace> workspace. Runs that use it will fail. This can't be undone." `ConfirmationDialog` now takes any node as its description, so the name carries its icon there too. - Adding a secret is titled "Add a workspace secret". - The replace dialog shows the secret's key icon at its top left, like the secret's row. - The empty-state line under the list is gone. The add button is enough. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
camielvs
force-pushed
the
cvs/tangent-secrets-window
branch
from
October 31, 2026 00:12
3eaca13 to
f3d06a4
Compare
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.
Description
Tangent's project dock gains a Secrets window when the project's workspace maps to a team. It lists the workspace's secrets, the ones runs in the project use when they act as the team. Your own secrets stay in Settings → Secrets. The copy calls the team the workspace: a team takes its workspace's name, and the workspace is what people know it by.
/api/secrets/.A team's name carries the workspace icon wherever it's written into copy, with the team id on hover, the icon centred on the text.
TeamNamedoes this for the add dialog, the delete confirmation and the window's notice. The replace dialog shows the secret's key icon at its top left, like the secret's row.Deleting a workspace secret is titled
Delete shared secret "{name}"?and says it's removed for the whole workspace, naming it in bold: "This removes the secret from the {workspace} workspace. Runs that use it will fail. This can't be undone."ConfirmationDialogtakes any node as its description, so the name carries its icon there, andTeamName'sboldsets the name in semibold and the icon at a matching stroke. Settings → Secrets keeps its wording, which has no workspace.The add and replace controls take an optional team id, and the delete control an optional team. Each invalidates that team's cache key. Their failure toasts now show the backend's reason, which matters once a request can be refused for acting as a team.
Related Issue and Pull requests
ListRowIcon, and the secret row's look. Replace and delete are inline buttons rather than a menu, so the row can reuse the confirming delete button from feat(secrets): harden the secret form #2939. Settings → Secrets stays your own secrets.Type of Change
Line Breakdown
Checklist
Screenshots (if applicable)
None yet.
Test Instructions
On a deployment with team impersonation, you need:
window.__TANGLE_TEAM_IMPERSONATION__;teamIdmetadata is a team's id;Then:
Without the impersonation config, no project has a Secrets window.
Additional Comments
The React Compiler now covers
src/components/shared/Teams.🤖 Generated with Claude Code