17 KiB
description
| description |
|---|
| Task list for feature: App Documentation (Android/KMP) |
Tasks: App Documentation (Android/KMP)
Input: Design documents from specs/003-app-docs-markdown/
Prerequisites: spec.md, plan.md, research.md, data-model.md, contracts/, quickstart.md
Status: Not Started
Format: [ID] [P?] [Story] Description
- [P]: Can be worked in parallel if dependencies are satisfied
- [Story]:
US1..US5map to the user stories inspec.md - Every task names the primary file paths to touch
Phase 0: Design Standards Gate (Blocking)
Purpose: Review Meshtastic design standards before shipping any new UI for docs or the Chirpy assistant.
- T000 [UI-GATE] Review
.skills/design-standards/SKILL.mdand upstream Meshtastic design standards; record constraints forfeature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ui/DocsBrowserScreen.kt,ChirpyAssistantSheet.kt, and screenshot styling. - T001 [UI-GATE] Confirm icon choices in
core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/for help/search/info/security states and choose MeshtasticIcons equivalents for docs UI and reference tables.
Checkpoint: Design constraints are documented and ready to guide implementation.
Phase 1: Documentation Content
Purpose: Author the docs corpus that both the website and in-app browser will consume.
User Guide pages
- T010 [P] [US1] Create
docs/user/onboarding.mdcovering first launch, intro flow, permissions, and initial setup using content fromfeature/intro/src/androidMain/kotlin/org/meshtastic/feature/intro/WelcomeScreen.kt,LocationScreen.kt, andNotificationsScreen.kt. - T011 [P] [US1] Create
docs/user/connections.mdcovering Bluetooth, USB, and TCP connection flows usingfeature/intro/.../BluetoothScreen.ktandfeature/connections/**as authoritative sources. - T012 [P] [US1] Create
docs/user/messages-and-channels.mdcovering conversations, channel security, direct messages, and message state usingfeature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/Message.ktandcomponent/MessageScreenComponents.kt. - T013 [P] [US1] Create
docs/user/nodes.mdcovering node list status, roles, badges, and quick actions usingfeature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListScreen.kt. - T014 [P] [US1] Create
docs/user/node-metrics.mdcovering node detail, device metrics, environment metrics, signal, power, traceroute, and logs usingfeature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.ktandmetrics/*. - T015 [P] [US1] Create
docs/user/map-and-waypoints.mdcovering maps, waypoints, and map-specific actions usingfeature/map/src/androidMain/kotlin/org/meshtastic/feature/map/MapScreen.kt. - T016 [P] [US1] Create
docs/user/settings-radio-user.mdcovering radio, LoRa, display, and user settings usingfeature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/DeviceConfigurationScreen.kt. - T017 [P] [US1] Create
docs/user/settings-module-admin.mdcovering module, administration, and advanced settings usingfeature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/ModuleConfigurationScreen.ktandAdministrationScreen.kt. - T018 [P] [US1] Create
docs/user/telemetry-and-sensors.mdcovering telemetry surfaces and sensor interpretation usingfeature/node/src/commonMain/kotlin/org/meshtastic/feature/node/metrics/EnvironmentMetrics.kt,PowerMetrics.kt, and related metric screens. - T019 [P] [US1] Create
docs/user/tak.mdcovering TAK integration and setup usingfeature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.ktand related settings screens. - T020 [P] [US1] Create
docs/user/mqtt.mdcovering MQTT setup and usage usingfeature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/MQTTConfigItemList.ktand messaging references. - T021 [P] [US1] Create
docs/user/discovery.mdcovering local mesh discovery and node exploration based on current discovery-related UI/state and app navigation flows. Note: Feature 001 (Local Mesh Discovery) is Not Started — author this page as a concept/goals overview initially and revise with screenshots and detailed UI guidance once 001 reaches Phase 5+ UI milestones. - T022 [P] [US1] Create
docs/user/firmware.mdcovering update flows, warnings, and recovery usingfeature/firmware/src/commonMain/kotlin/org/meshtastic/feature/firmware/FirmwareUpdateScreen.kt. - T023 [P] [US1] Create
docs/user/desktop.mdcovering Desktop host usage, transport differences, and parity notes usingdesktop/src/main/kotlin/org/meshtastic/desktop/and shared navigation patterns.
Developer Guide pages
- T024 [P] [US4] Create
docs/developer/architecture.mddescribing layer boundaries (app,desktop,feature/*,core/*) and shared KMP responsibilities. - T025 [P] [US4] Create
docs/developer/codebase.mddocumenting repository layout, namespacing, and build-logic conventions. - T026 [P] [US4] Create
docs/developer/adding-a-feature-module.mddocumentingmeshtastic.kmp.feature, source sets, DI, resources, and testing expectations. - T027 [P] [US4] Create
docs/developer/navigation-and-deep-links.mddocumentingRoutes.kt,DeepLinkRouter.kt, and Navigation 3 graph registration patterns. - T028 [P] [US4] Create
docs/developer/transport.mddocumenting BLE, TCP, Serial/USB, and host-specific abstractions. - T029 [P] [US4] Create
docs/developer/persistence.mddocumenting Room KMP, DataStore/core:prefs, and where docs intentionally do not use persistence. - T030 [P] [US4] Create
docs/developer/testing.mddocumenting KMP test strategy, host tests, and planned screenshot automation. - T031 [P] [US4] Create
docs/developer/contributing.mddocumenting branch naming, verification, and PR hygiene.
Content-supporting assets
- T032 [P] [US1] Create or inventory
docs/assets/screenshots/references and map each page to required PNG or SVG assets. - T033 [P] [US1] Extract onboarding tips, warnings, and disclaimers from
feature/intro/**,feature/firmware/**, and relevant feature UIs into highlighted callout sections inside the authored markdown. - T034 [US1] Review all markdown for reference-table compliance where 2+ icon/state captures appear together.
Checkpoint: Complete markdown corpus exists with planned screenshots and callouts.
Phase 2: Jekyll Site Setup
Purpose: Make the authored markdown browsable on the web with versioning.
- T040 [P] [US1] Create
docs/_config.ymlwithjust-the-docs, sidebar search, and the required collection/navigation settings. - T041 [P] [US1] Create
docs/index.mdredirect behavior for/latest/and beta handling. - T042 [P] [US1] Create
docs/_data/versions.ymlwith an initialbetaentry and stable release entry schema. - T043 [P] [US1] Create any shared include/layout files needed for version selector, beta banner, and consistent screenshot styling.
- T044 [US1] Validate local Jekyll build output from the authored markdown and confirm the navigation hierarchy matches the spec.
Checkpoint: Local website build is navigable and version-ready.
Phase 3: Build Pipeline (Markdown → HTML, Index, Bundle)
Purpose: Implement Gradle-native docs generation suitable for KMP.
- T050 [P] [US1] Create
feature/docs/build.gradle.ktsusingmeshtastic.kmp.featureand dependencies forcore:common,core:navigation,core:resources,core:ui,core:di, and existing markdown renderer libraries. - T051 [P] [US1] Add
:feature:docstosettings.gradle.kts. - T052 [P] [US1] Add docs-generation support in
build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/DocsTasks.kt(or equivalent) with lazy task registration. - T053 [P] [US1] Implement frontmatter parsing, nav-order extraction, and markdown normalization in build logic or
feature/docsbuild task code. - T054 [P] [US1] Implement HTML rendering via
flexmark-java(orcommonmark-javafallback) in the docs generation task. - T055 [P] [US1] Implement callout and banner post-processing, shared CSS injection, and
data-pageemission for generated HTML. - T056 [P] [US1] Generate
index.jsonmatchingspecs/003-app-docs-markdown/contracts/keyword-index-schema.json. - T057 [P] [US1] Wire generated output into
feature/docs/build/generated/docs/common/as a Gradle resource source directory. - T058 [P] [US1] Add Android asset mirroring if required for WebView file loading under
feature/docs/build/generated/docs/androidAssets/. - T059 [P] [US1] Enforce bundle-size warnings/failures and missing-asset validation in
validateDocsBundle. - T060 [US1] Add aggregate root tasks (
generateDocsBundle,validateDocsBundle,publishDocsSite) and document their usage.
Checkpoint: Gradle can generate the docs bundle and website artifact from markdown.
Phase 4: In-App Doc Browser
Purpose: Ship the offline docs browser inside Settings.
- T070 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/model/DocModels.ktimplementing the entities fromdata-model.md. - T071 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/data/DocBundleLoader.ktto load packaged docs metadata and page content. - T072 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ui/DocsBrowserScreen.ktwith grouped TOC, search entry point, and loading/empty states. - T073 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ui/DocsPageRouteScreen.ktto route page IDs to renderer surfaces. - T074 [P] [US2] Create Android renderer
feature/docs/src/androidMain/kotlin/org/meshtastic/feature/docs/ui/DocHtmlView.android.ktusingAndroidView+WebView. - T075 [P] [US2] Create Desktop/iOS page renderers in
src/jvmMainandsrc/iosMainusing Compose markdown or embedded browser abstraction. - T076 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/navigation/DocsNavigation.ktwith typed navigation entries. - T077 [P] [US2] Add
SettingsRoute.HelpDocsandSettingsRoute.HelpDocPagetocore/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/Routes.kt. - T078 [P] [US2] Update
core/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/DeepLinkRouter.ktforhelp-docs(canonical) /helpDocs(compat alias) routing. - T079 [P] [US2] Update
feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.ktto add the Help & Documentation row and register docs destinations. - T080 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/di/FeatureDocsModule.kt. - T081 [P] [US2] Include
FeatureDocsModuleinapp/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.ktanddesktop/src/main/kotlin/org/meshtastic/desktop/di/DesktopKoinModule.kt. - T082 [US2] Add shared/unit tests for bundle loading, page ordering, and route serialization under
feature/docs/src/commonTest/kotlin/org/meshtastic/feature/docs/.
Checkpoint: Help & Documentation opens inside Settings and reads bundled content offline.
Phase 5: Search / Index / Discoverability
Purpose: Make the docs corpus searchable on all targets.
- T090 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/data/KeywordSearchEngine.ktusingKeywordIndexEntry. - T091 [P] [US2] Add alias normalization and title-first ranking logic.
- T092 [P] [US2] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ui/DocsSearchBar.ktand wire it intoDocsBrowserScreen.kt. - T093 [P] [US2] Add section-aware search results and page suggestions for missing page/deep-link cases.
- T094 [P] [US2] Add tests for ranking, aliases, and tie-breaking in
KeywordSearchEngineTest.kt. - T095 [US2] Ensure keyword search is the user-visible fallback on unsupported AI targets.
Checkpoint: Search works without AI on every target.
Phase 6: AI Assistant (Gemini Nano)
Purpose: Add an Android-only on-device assistant without breaking KMP or fdroid.
- T100 [P] [US3] Create shared AI contracts in
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ai/AIDocAssistant.ktand result/state models. - T101 [P] [US3] Create
feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/ui/ChirpyAssistantSheet.ktwith chat UI, pinned input, session history, and source-page chips. - T102 [P] [US3] Add keyword-retrieval + token-budget helper logic in shared code.
- T103 [P] [US3] Implement Google-flavor Android binding under
app/src/google/kotlin/org/meshtastic/app/docs/GoogleDocsAiModule.kt(or equivalent) to call Gemini Nano via Google AI Edge SDK. - T104 [P] [US3] Bind a no-op or keyword-only fallback implementation in
app/src/fdroid/kotlin/org/meshtastic/app/di/FlavorModule.kt. - T105 [P] [US3] Bind a Desktop fallback implementation from
desktop/src/main/kotlin/org/meshtastic/desktop/di/DesktopKoinModule.kt. - T105b [P] [US3] Bind an iOS fallback implementation (keyword-search-only, sharing the Desktop fallback pattern) in the iOS Koin module or via a shared non-Android default binding.
- T106 [P] [US3] Add runtime capability checks for Android API level, flavor, model availability, and busy/quota states.
- T107 [P] [US3] Surface assistant fallback states cleanly in the shared UI and hide the input entirely when unsupported.
- T108 [P] [US3] Add tests covering token budget trimming, unsupported platform behavior, and fallback search suggestions.
- T109 [US3] Verify the Chirpy vector asset is bundled and rendered correctly across targets.
Checkpoint: Supported Android Google builds get Gemini Nano; all other targets fall back gracefully.
Phase 7: CI Automation and GitHub Pages
Purpose: Keep docs current and deployable.
- T120 [P] [US5] Create
.github/workflows/docs-deploy.ymlusingubuntu-24.04, JDK 21, Gradle setup, docs-generation tasks, and Pages deploy steps. - T121 [P] [US5] Create
.github/workflows/docs-release.ymlforv*.*.*tags, version manifest updates, and/latest/redirect refresh. - T122 [P] [US5] Create or wire
recordDocsScreenshotsto the chosen screenshot framework (Roborazzipreferred,Paparazziacceptable). - T123 [P] [US5] Add screenshot asset diff detection and automated PR creation logic for changed PNGs.
- T124 [P] [US5] Add schema validation against
specs/003-app-docs-markdown/contracts/keyword-index-schema.jsonduring CI. - T125 [P] [US5] Add bundle-size validation and missing-asset validation to CI as blocking steps.
- T126 [P] [US5] Update workflow permissions and Pages artifact publishing configuration.
- T127 [US5] Dry-run the workflows locally as far as practical and verify contract alignment.
Checkpoint: Docs build, validate, and deploy automatically in CI.
Phase 8: Polish, Accessibility, and Edge Cases
Purpose: Final quality pass before implementation is considered complete.
- T130 [P] [US2] Add accessibility labels, headings, and focus order checks to docs browser and Chirpy UI.
- T131 [P] [US2] Validate dark-mode rendering for generated HTML, screenshots, and icon reference tables.
- T132 [P] [US2] Handle missing-page and stale-deep-link fallbacks in the docs browser UI.
- T133 [P] [US3] Add explicit user messaging for Gemini busy/quota/model-not-installed states.
- T134 [P] [US1] Review all pages for plain-language voice, no internal jargon leaks, and consistency with current UI strings.
- T135 [P] [US4] Review developer docs for correctness against actual modules, routes, and DI setup.
- T136 [P] [US5] Validate Lighthouse accessibility on the generated site and record results.
- T137 [P] [US5] Add README updates for Help & Documentation and the deep-link contract.
- T138 [US1] Run final verification:
./gradlew spotlessCheck detekt kmpSmokeCompile test allTests generateDocsBundle validateDocsBundle publishDocsSite.
Checkpoint: Feature is accessible, correct, and release-ready.
Dependency Notes
- Phase 0 blocks all UI work.
- Phase 1 (content) and Phase 2 (site scaffolding) can overlap.
- Phase 3 must finish before Phase 4 can load generated bundles reliably.
- Phase 5 depends on Phase 3 metadata/index generation and Phase 4 browser UI.
- Phase 6 depends on Phase 5 because AI retrieval uses the keyword index and search engine.
- Phase 7 depends on Phases 2 and 3.
- Phase 8 depends on all preceding phases.
Recommended Delivery Order
- Ship US1 first (web docs + pipeline).
- Add US2 (in-app browser + deep links).
- Add US3 (Gemini Nano + fallbacks).
- Finish US4 polishing and architecture docs.
- Finish US5 automation and screenshot bot flow.