Skip to content

fix(vetting): take up the join from the application it was made for - #343

Merged
stormer78 merged 1 commit into
mainfrom
worktree-join-resume
Sep 18, 2026
Merged

stormer78 merged 1 commit into
mainfrom
worktree-join-resume

Conversation

@stormer78

@stormer78 stormer78 commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Rebased onto main now that #342 has merged; this PR is a single commit against main.

Why

Choosing to be vetted from the join flow abandoned the join. JoinVettingApply
started the application, set active_page = Main and returned Returned(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

j on a vetting application takes up its join. The community is the one the
application names, so Action::StartJoinFor(vtc_did)JoinEntry::ForCommunity
opens 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 a
community — 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(_) build
the 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 — clean
  • cargo test --all-features -- --include-ignored — all green
  • RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features — clean

New test: j sends StartJoinFor with 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.

@stormer78
stormer78 requested a review from a team as a code owner September 18, 2026 08:02
Base automatically changed from worktree-join-routes-page to main September 18, 2026 08:02
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
stormer78 merged commit eee0557 into main Sep 18, 2026
29 checks passed
@stormer78
stormer78 deleted the worktree-join-resume branch September 18, 2026 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant