Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions PROJECT_SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ and it can be reopened from Help. It is not an account setup flow or a multi-pag

After the first-run introduction, the user enters the focused connection editor directly. On later
launches with no active session, Home shows saved connections and a primary action for starting a
new connection. Selecting either opens the focused connection editor; users do not cross transcript
new connection. Tapping a saved host with a ready preferred identity starts a connection; a saved
password adds device approval. Missing credentials open focused entry, while Edit and Change
identity are separate actions. New connection opens the editor. Users do not cross transcript
history or trust-management content to reach credentials and the connect action. Only the standard
SSH port `22` is prefilled for a new connection; development-fixture values are never production
defaults.
Expand Down Expand Up @@ -123,9 +125,11 @@ A saved host profile contains:
- Hostname or IP address
- Port, default `22`
- Username
- Preferred SSH identity, if one is chosen

Authentication method is selected for each connection and is not linked to the
saved profile. Credentials are never part of a host profile.
An identity supplies the authentication method for a connection. Choosing a different identity
for one attempt does not change the saved preference unless the profile is updated explicitly.
Credentials are never part of a host profile.

Supported authentication for MVP:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ class ConnectionFormRetentionTest {
}

@Test
fun savedConnectionAndNewConnectionLeadDirectlyToFocusedEditorAtLargeFontScale() {
fun savedProfileEditAndNewConnectionLeadToFocusedEditorAtLargeFontScale() {
val profile = SavedHostProfile(
id = "saved-profile",
displayName = "Barnabas",
Expand Down Expand Up @@ -155,7 +155,7 @@ class ConnectionFormRetentionTest {
}
}

compose.onNodeWithTag(ConnectionFormTags.SAVED_PROFILE_PREFIX + profile.id)
compose.onNodeWithTag(ConnectionFormTags.EDIT_PROFILE_PREFIX + profile.id)
.performScrollTo()
.assertIsDisplayed()
.performClick()
Expand Down Expand Up @@ -795,7 +795,7 @@ class ConnectionFormRetentionTest {
compose.onNodeWithTag(ConnectionFormTags.BACK_HOME)
.performScrollTo()
.performClick()
compose.onNodeWithTag(ConnectionFormTags.SAVED_PROFILE_PREFIX + original.id)
compose.onNodeWithTag(ConnectionFormTags.EDIT_PROFILE_PREFIX + original.id)
.performScrollTo()
.performClick()
compose.onNodeWithTag(ConnectionFormTags.DISPLAY_NAME)
Expand Down Expand Up @@ -833,7 +833,7 @@ class ConnectionFormRetentionTest {
compose.waitForIdle()

assertEquals(original.id, deletedId)
compose.onNodeWithTag(ConnectionFormTags.SAVED_PROFILE_PREFIX + original.id)
compose.onNodeWithTag(ConnectionFormTags.EDIT_PROFILE_PREFIX + original.id)
.assertDoesNotExist()
compose.onNodeWithTag(ConnectionFormTags.NEW_CONNECTION).performClick()
compose.onNodeWithTag(ConnectionFormTags.PASSWORD)
Expand Down Expand Up @@ -893,7 +893,7 @@ class ConnectionFormRetentionTest {
}
}

compose.onNodeWithTag(ConnectionFormTags.SAVED_PROFILE_PREFIX + profile.id)
compose.onNodeWithTag(ConnectionFormTags.EDIT_PROFILE_PREFIX + profile.id)
.performClick()
compose.onNodeWithTag(ConnectionFormTags.USERNAME)
.assertEditableTextEquals("operator")
Expand Down
Loading
Loading