medium priority low complexity documentation pending documentor Tier 6

Acceptance Criteria

Developer documentation covers all required route arguments for the post-session report screen with their types, nullability, and default values
Developer documentation describes the session-lock guard contract: which conditions prevent navigation to the screen, what error state is shown, and how the guard is tested
Developer documentation explains draft detection logic including the database query used, the staleness threshold, and the UI state transitions triggered by draft presence
Developer documentation describes how activity_id is passed, stored, and referenced throughout the report lifecycle
Developer documentation covers the speech-to-text permission flow: initial request, granted path, denied path, restricted path, and how each state is surfaced to the user
Tester guide is written entirely in Norwegian BokmĂĄl with plain, non-technical language suitable for users with varying digital skill levels
Tester guide includes step-by-step instructions with numbered steps for: opening the report after a session, understanding the draft indicator, saving a draft, resuming a draft, submitting a report, and enabling voice input
Tester guide includes a 'Hva gjør jeg hvis…' (What do I do if…) section covering the most common failure scenarios (microphone denied, draft not found, submit fails)
Both documents are reviewed by at least one team member before delivery
Tester guide is delivered in a format accessible on iPhone (PDF or web link) without requiring the recipient to install additional software

Technical Requirements

frameworks
Flutter
data models
PostSessionReport
ReportDraft
Activity
security requirements
Tester guide must not include any real user data, session content, or organisation-specific PII as examples
Developer docs must note which route arguments are considered sensitive and must not be logged

Execution Context

Execution Tier
Tier 6

Tier 6 - 158 tasks

Can start after Tier 5 completes

Implementation Notes

For the developer documentation, co-locate a README.md or doc comment block directly in the post-session report screen's directory so it stays close to the code it describes and is updated alongside code changes. Use code snippets to show the GoRouter route definition and the required arguments map. For the tester guide, use large font, short sentences, and avoid all technical jargon — the target audience includes people with visual impairments who may be using VoiceOver to read the guide. Include screenshots only if they are high-contrast and labelled with alt text.

Deliver the tester guide as a PDF generated from a clean Markdown source so it can be regenerated easily for future pilot rounds.

Testing Requirements

Have one developer who was not involved in building the screen follow the developer documentation to navigate to the screen in a local dev environment and confirm all route argument descriptions are accurate. Have one non-technical stakeholder (or a team member roleplaying as a tester) follow the Norwegian tester guide on a real device and flag any step that is unclear or produces an unexpected result. Both reviews must be completed before the documents are considered done.

Component
Post-Session Report Screen
ui high
Epic Risks (2)
medium impact high prob technical

End-to-end integration tests that span Flutter UI → Supabase → RLS → storage are inherently flaky in CI due to network timing, test database state, and Supabase cold-start latency. Flaky tests erode confidence and slow the release pipeline.

Mitigation & Contingency

Mitigation: Use a dedicated Supabase test project with seeded org and user fixtures. Wrap all E2E tests in retry logic with a fixed seed and tear-down hooks. Keep E2E tests in a separate test suite that runs on-demand rather than on every PR, with unit and widget tests as the primary CI gate.

Contingency: If E2E tests remain unreliable, replace the Supabase calls in integration tests with a verified fake (in-memory repository implementations) and promote the real Supabase tests to a nightly scheduled run rather than blocking PR merges.

high impact medium prob security

Health status, course interest, and assistive device fields contain personal health data. If any logger, analytics event, or crash reporter captures field values — through automated error serialisation or developer-added debug logs — the feature could violate GDPR and Blindeforbundet's data processor agreement.

Mitigation & Contingency

Mitigation: Audit all log statements in the report feature's code paths before the epic is marked done. Apply a PII-safe logging wrapper that strips field values from any serialised form state before it reaches the logger. Add a CI lint rule that flags direct logger calls within report-related files.

Contingency: If PII is found in logs post-launch, immediately disable the affected logging call and rotate any credentials that were exposed. Notify the data protection officer and document the incident per GDPR Article 33 requirements.