fix(vetting): take up the join from the application it was made for - #343
Merged
Merged
Conversation
Choosing to be vetted from the join flow abandoned the join. Starting an application returned to the Vetting page with nothing carried over, so once the statements were in the community had to be found and entered a second time. That is why vetting read as something to go and do *before* joining, rather than as one of the ways of joining. `j` on an application now takes up that join. The community is the one the application names, so `JoinEntry::ForCommunity` opens the flow where the DID entry page would have led — the same discovery, the same routes, no DID to find again. Nothing new is persisted to make this work: an application already records its community, so it *is* the parked join. That matters more than a field would, because gathering statements takes days and a transient handle would not survive the restarts in between. The submit arm's body moves into `enter_community` so both ways in share one path. The degraded loop's `StartJoin` arm takes both verbs, keeping the listener invariant documented there over the pair rather than over one of them, and the two "next step" lines stop telling people to go to Communities for a key that now works where they are standing. Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
stormer78
force-pushed
the
worktree-join-resume
branch
from
September 18, 2026 08:05
a4e32ef to
66c80e4
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.
Rebased onto
mainnow that #342 has merged; this PR is a single commit againstmain.Why
Choosing to be vetted from the join flow abandoned the join.
JoinVettingApplystarted the application, set
active_page = Mainand returnedReturned(None);nothing was carried over, so once the statements were in the community had to be
found and entered a second time. That is the whole reason vetting read as
something to go and do before joining, rather than as one of the ways of
joining — it was not a prerequisite, it was a dead end mid-flow.
What changed
jon a vetting application takes up its join. The community is the one theapplication names, so
Action::StartJoinFor(vtc_did)→JoinEntry::ForCommunityopens the flow where the DID entry page would have led: same discovery, same
routes chooser, no DID to find again.
Nothing new is persisted. An application already records its community, so it
is the parked join. That is better than a transient handle on the loop would
be: gathering statements takes days, and the person will restart OpenVTC many
times in between. A field that did not survive a restart would be a resume that
works only in the session where it is least needed.
The submit arm's body moves into
enter_community. Both ways into acommunity — the entry page and a resumed join — now share one path, so the
invitation collection, the manifest question and the "could not ask" case cannot
drift between them.
The degraded loop's arm takes both verbs.
StartJoin | StartJoinFor(_)buildthe entry and fall into the same body, which keeps the "must never own a live
listener across an iteration" invariant documented over the pair rather than over
one of them.
Two "next step" lines stop pointing elsewhere.
next_step_words(Join)was"join from Communities (j)" and the satisfied progress line was "join from
Communities"; the key now works where the person is standing, so they say so. The
messages the join flow leaves on the Vetting panel say the join is not lost.
Testing
Re-run after the rebase:
cargo fmt --all --check,cargo clippy --all-targets --all-features— cleancargo test --all-features -- --include-ignored— all greenRUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features— cleanNew test:
jsendsStartJoinForwith the community of the row under the cursor(not the first row), does nothing with no application under the cursor, and is not
bound on the desk.
The manual dry-run guide is updated for both PRs — a new step 06a (start from the
join, read the ways in), a rewritten step 11 (take the join up again, after a
restart, to prove the application is the parked join), and four new "ways in"
negative cases.
Live run against a vetting community not yet done.