Skip to content

Streamline interview handoff review and continuation - #355

Merged
nonprofittechy merged 6 commits into
mainfrom
ux/166-streamline-handoff
Oct 23, 2026
Merged

nonprofittechy merged 6 commits into
mainfrom
ux/166-streamline-handoff

Conversation

@nonprofittechy

@nonprofittechy nonprofittechy commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

An imported interview draft currently shows generic confirmation controls and buries its next action. Final review then redirects users through the case-information form just to approve PDFs whose court choices were already resolved. Let users approve the current PDF copies on the handoff page, keep matched details editable behind a disclosure, and put the next action first.

  • Show specific missing choices outside the imported-answer accordion; show correction confirmation only when needed.
  • Honor confirmed empty confidentiality choices and use the ordinary workflow’s component-readiness rules. Preserve unresolved confidentiality questions, clerk corrections, fingerprint checks, and final submission validation.
  • Resume already-owned drafts without another claim screen. Clarify that the interview return action replaces PDFs rather than synchronizing names/addresses/court choices.
  • Add a direct link to the final submission section without separating its court terms and attestation from Submit.

Unmatched court/category/case-type or document filing-type choices now offer Explore replacements outside the accordion and as an entry in its table. For new cases, this focused route reuses the existing code-search service, filters by every saved code and case stage before pagination, and shows only missing fields in each candidate. Explicit selection validates the full path against the live court API, rechecks saved values under a transaction, and fills only blanks. Existing names/codes, other documents, PDFs, people and confidentiality choices are retained. No results, retired choices and network failures leave the draft intact. Party-role and confidentiality questions continue to use their existing editors.

Latest validation: 205 passed, 2 skipped across handoff, code-search and correction tests. Includes conflicting selections, concurrent edits, stage/ownership boundaries, no index, network failure, retired options, preservation of saved answers and code filtering before pagination. Ruff, Ty, template lint, Bandit and migration checks passed. Localhost Chromium exercised real search/validation/update code with a synthetic index and simulated external court responses.

Related to #166; this does not close its live Vermont acceptance criteria. RFA companion: LSVermont/docassemble-RFApackage#437 (stacked on its sender PR #426).

Validation: handoff/review/PDF-preview run: 89 passed; final handoff/correction run: 69 passed, 2 skipped. Ruff, Ty, template lint, Bandit, and migration checks pass. Chromium at 390 × 844 confirms both primary actions are above the fold and the details disclosure works by keyboard. Synthetic screenshots.

Argon and Claude independently reviewed the source flow. Findings, implementation choices, and next proposals are in docs/developer-notes/issue-166-handoff-ux.md: synchronize interview revisions, verify confidential contact handling in party metadata, shorten the shared sender transition, and align NEXT STEPS instructions. The RFA completion screen was subsequently exercised in actual localhost Docassemble with generated PDFs; full end-to-end court submission remains unverified.

Full local pre-push Python run: interrupted after 16m34s waiting in urllib3; 454 tests passed, with no reported failure before interruption. JavaScript unit tests passed. Opening as a draft pending full-suite/CI verification; the focused regression checks above completed successfully.

Full-suite diagnostic rerun with EFSP_URL=http://127.0.0.1:9: 2,322 passed, 13 skipped, 4 failed in 112.94s. The four failures require live court authentication/profile or case-category responses and received unavailable-service responses, as expected with that deliberately unreachable endpoint. This is not a claim of a clean full integration run. GitHub CI is running with its configured services; the PR remains draft pending those results.

Independent code review

Claude and agy/Argon independently reviewed the full PR through 0a10c55. Confirmed findings were fixed in c0de567; both follow-up reports found no remaining blockers. Findings were checked against source and regression tests because some initial report line references were inaccurate.

  • Restrict replacement lookup to new cases; existing cases keep their confirmed case records and permitted filing types.
  • Resume dependent hint matching after replacement without changing metadata during PDF approval. Approve current PDF copies before proceeding to missing details, avoiding repeat review at payment.
  • Reset stale confidentiality confirmations and retain live amount requirements.
  • Recover from document deletion and concurrent edits; refresh conflict results and avoid duplicate provenance events.
  • Use one relevant search hint, show unmatched document and party hints outside the accordion, and allow paging past unavailable choices.

Validation: 205 passed, 2 skipped across handoff, code-search and correction tests. Ruff, Ty, template lint, Bandit, migration checks and JavaScript tests passed. Refreshed localhost screenshots use synthetic court responses; live Vermont filing remains unverified.

Localhost handoff simulation

Show transferred answers in an optional accordion above the PDFs, using two-column tables with bold row labels, consistent padding, and light separators. Interview hints remain separate from saved court choices. Highlight missing choices outside the accordion, including the suggested case type when it could not be matched. The primary action remains above the fold on mobile.

Actual Django pages with synthetic records passed through the normal import and matching services. Simulated court responses include a changed case-type label that no longer matches the interview hint; the ordinary resolver and readiness calculation leave the choice unresolved and block continuation. External court-question lookups are stubbed. No DOM or UI controls were replaced; this is not live court validation. PDFs were not opened in this simulation.

Validation: 70 passed, 2 skipped in handoff/correction tests; after the table layout update, all 44 handoff tests passed again. Template and CSS checks passed. Ruff, Ty, template lint, Bandit and migration checks passed. Chromium checked keyboard opening and primary-action visibility at 390 × 844. All eight screenshots, including desktop, in the unlisted gist.

Matched court choices

Accordion closed Accordion open
matched court choices, accordion closed, actual localhost simulation matched court choices, accordion open, actual localhost simulation
Desktop screenshots

matched choices, accordion closed

matched choices, accordion open

Unmatched court choices

Accordion closed Accordion open
unmatched court choices, accordion closed, actual localhost simulation unmatched court choices, accordion open, actual localhost simulation
Desktop screenshots

unmatched choices, accordion closed

unmatched choices, accordion open

Replacement lookup screenshots

Actual localhost simulation; court responses are synthetic. Saved court and category stay fixed while the filer explores missing case and filing types.

Possible replacement

Possible replacement, localhost simulation

No results: keep the draft

No results: keep the draft, localhost simulation

Court unavailable: keep the draft

Court unavailable: keep the draft, localhost simulation

Replacement applied

Replacement applied, localhost simulation

Desktop replacement lookup

Replacement lookup desktop

Actual localhost RFA screenshots

Captured from the PR branch installed in localhost Docassemble, with API-seeded synthetic answers and real generated PDFs. These show the actual AssemblyLine download and email widgets; no controls or styles were replaced. No email was sent or court filing submitted. Both enabled and disabled configurations were exercised. Unlisted screenshot gist.

Online filing enabled

Actual localhost RFA completion: online filing enabled, mobile

Actual localhost RFA completion: online filing enabled, desktop

Online filing disabled

Actual localhost RFA completion: online filing disabled, mobile

Actual localhost RFA completion: online filing disabled, desktop

Claude simplify pass

Ran Claude’s actual /simplify workflow and reviewed the resulting refactor (2a0dcc4). Shared helpers now handle interview filing hints, lookup eligibility and filing-type flags; source suggestions are fetched in one query, correction updates are batched, and duplicated view work is removed. The four-file Python refactor preserves templates, styles, safeguards and regression tests.

Validation: 205 passed, 2 skipped, with Ruff, Ty, Bandit and migration checks passing. The broader suite was interrupted while waiting in external HTTPS/SSL code after 1,076 passes; it is not a clean full-suite result.

Claude /simplify summary.

@nonprofittechy
nonprofittechy marked this pull request as ready for review October 23, 2026 20:22
@nonprofittechy
nonprofittechy merged commit 8aa288b into main Oct 23, 2026
8 checks passed
@nonprofittechy
nonprofittechy deleted the ux/166-streamline-handoff branch October 23, 2026 20:22
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