Skip to content

Hourleaf product roadmap — trust, speed, Shortcuts, and release #3

Description

@kiku-jw

Implement the accepted full Hourleaf product roadmap while preserving the existing local ledger and the minimal, immediately understandable iPhone experience.

Status: Awaiting Owner
Next actor: Nick
Next action: Sign the Apple Account into Xcode locally and complete any password or 2FA prompt. Then tell Codex "готово" to retry the verified Hourleaf 1.0.2 (13) upload, processing readback, attachment, and submission.

Outcome

Hourleaf becomes a durable private ministry-hours product: entries are recoverable and portable, common actions are one tap or a system Shortcut away, every total is explainable, planning remains calm, and optional platform features do not compromise offline-first use.

Product constraints

  • Native SwiftUI and Apple frameworks; no third-party SDKs, ads, tracking, or product analytics.
  • Local-first and fully usable without network, iCloud, an account, or a paid Apple Developer membership.
  • Preserve all existing user records and Personal Team testing data through an explicit portable-backup migration path.
  • Minimal UI: reveal complexity only where it is needed; explain each control in ordinary RU/UK/EN language with a concrete consequence or example.
  • Credit never contributes to the 600-hour service-year goal; totals may exceed 600; no time carries across August to September.
  • Backup v1 has no password. Warn plainly when notes are included.
  • No external account, direct recipient delivery, CRM, contacts, territories, maps, GPS, streaks, badges, social features, or AI coaching.

Specification decisions

  • Preserve the four-tab app and fast-entry default; advanced planning, report history, data tools and Shortcuts help remain progressively disclosed.
  • Use one actor-isolated asynchronous Core Data repository and one validated command path for SwiftUI, App Intents, widgets, Watch and timer.
  • Every entry mutation appends an immutable revision and returns a persisted Undo-capable mutation receipt.
  • Until Portable Forever is verified, retain and show every soft-deleted entry. Only then may Hourleaf introduce a tested 30-day purge policy.
  • Backup v1 is one canonical JSON .hourleafbackup, SHA-256 checked, plain and password-free; notes receive an explicit warning.
  • Restore v1 validates in a temporary store, previews, makes a verified pre-restore backup and performs whole-database replacement only.
  • Implement iOS 17 App Intents/App Shortcuts immediately after the shared command layer. Control Center controls are iOS 18+ and gated separately.
  • App Intent writes/reads require authentication, work offline and never depend on a live SwiftUI environment.
  • App Group/data widgets, CloudKit, Watch, TestFlight and App Store retain signed-device/account owner gates.
  • Existing com.kikuai.hourleaf.local records migrate to the final bundle through .hourleafbackup.

Executable slices

  • 1. V2 model, actor repository, migration fixtures
  • 2. Shared commands, revisions, soft delete, Recently Deleted, Undo
  • 3. iOS 17 App Intents, App Shortcuts, typed routes, Action Button smoke — code merged at 8d1f70b; signed-device gate pending
  • 4. Canonical backup v1 codec/checksum/export — merged at 10c51b2
  • 5. Backup/CSV UI, previewed restore, rollback
  • 6. One-Tap exploration completed — Repeat Last Entry was removed after field feedback; fast entry remains available through blank Quick Entry, Shortcuts, widget, and timer
  • 7. Explainable report states, review, immutable corrections/templates
  • 8. Calm pace, calendar and versioned service-year archive
  • 9. Reminder actions and opt-in Quiet Gap Check
  • 10. Privacy-safe widget and iOS 18 controls — M4 code merged at cbb24d6; signed App Group/widget/control acceptance remains owner-gated
  • 11. Opt-in crash-safe timer; Live Activity later
  • 12. Opt-in private iCloud — NO-GO until paid CloudKit access and an accepted V3 branch/conflict-preservation model; local-first store plus portable backup remain authoritative
  • 13. Native Apple Watch companion — direct service/credit entry, Watch Connectivity, localized Watch UI, icons, privacy manifest, and embedded packaging are implemented; one physical direct entry was accepted, while Siri/Shortcuts remains a TestFlight acceptance gate.
  • 14. CSV then fixture-backed competitor imports — strict Hourleaf CSV complete; named adapters remain fixture-gated
  • 15. Local-bundle migration, accessibility/privacy/device QA and owner-gated public release — ungated foundation accepted at cdb303a; signed-device/public-release gates remain

Cross-slice acceptance

  • Existing stores migrate without data loss; destructive actions are reversible.
  • A backup round-trips every supported entity and a failed/corrupt restore cannot replace the live store.
  • Common service/credit additions work through both the app and App Intents via one validated command contract, offline, with undo.
  • Shortcuts are discoverable, parameterized, localized, and do not expose private notes/totals by default.
  • A non-technical older user can understand quick entry, settings, report state, backup/restore, and planning without documentation.
  • Unit, migration, integration, UI, localization, accessibility, offline/restart, and signed-device smoke evidence is recorded per slice.
  • Coherent verified slices are committed and pushed; this Issue remains the sole execution ledger for the roadmap.

Verified delivery

Slice 1 landed on main at 12706b0. Fresh evidence: 32 unit/integration tests; 13 full UI tests plus 3 final report-boundary UI checks; unsigned generic-device Debug and Release builds; exact byte preservation of the V1 model; Sol Max adversarial review GO with no P0/P1/P2 findings. Physical iPhone remains untouched.

Slice 2 landed on main at c0fcb99. Fresh evidence: 58 unit/integration and 16 UI tests; unsigned generic-device Debug and Release builds; strict invalid-date/duration/revision handling; idempotent exact replay; optimistic revision conflicts; soft delete/restore; all four Undo inverses and the exact ten-minute boundary; report calculation/presentation fingerprints; RU/UK/EN validation; unchanged Core Data model/project/entitlements; Sol Max re-review GO with P0 0 and P1 0. Physical iPhone remains untouched.

Slice 3 code landed on main at 8d1f70b. Fresh evidence: 70 unit/integration and 19 UI tests (89/89 total); unsigned Debug and Release builds; Xcode Analyze; exactly three RU/UK/EN promoted commands; one shared repository actor; coalesced active/foreground/startup refresh; typed reminder routing; cold and warm blank-form reset; Sol Max adversarial GO with P0 0 and P1 0. A disposable signed smoke attempt stopped before installation because Xcode has no signed-in Personal Team account, so the physical device and its ledger remained unchanged. The slice stays open only for Shortcuts, Action Button, and reminder lifecycle smoke after the owner signs in to Xcode.

Slice 4 landed on main at 10c51b2. Fresh evidence: exact raw preservation of all 10 V2 entities and 115 attributes; canonical password-free JSON with SHA-256 and bounded validation; atomic no-overwrite protected export; 26 focused backup tests; 115/115 combined tests after Shortcuts integration; unsigned Debug and Release builds; Xcode Analyze; unchanged models/project/entitlements/privacy/dependencies; Sol Max publish GO with P0 0, P1 0, and P2 0. Signed file-protection and File Provider behavior move to the Slice 5 disposable canary. The physical iPhone ledger remains untouched.

Slice 11 is accepted on the feature branch at 962aec5: host-only, default-off crash-safe timer; review-before-save; no note capture; no extension ledger writer. Unit, UI, Release and Analyze gates passed. App Group/control/widget and physical-device canaries remain owner-gated.

Slice 14 is accepted on the feature branch at bc784c0: strict bounded Hourleaf CSV import, deterministic identities, one-save atomic application, conservative duplicate handling, ten-minute batch Undo, aggregate-only preview and human EN/RU/UK UI. Fresh final evidence: 417/417 unit/integration, 43/43 UI, post-cleanup coordinator 4/4, Release build, Xcode Analyze, protected-hash/localization gates and one bounded adversarial review with P0/P1/P2 = 0. A real external-file import journey remains signed-device acceptance; named competitor adapters require an owner-supplied sanitized export fixture.

Live revision-graph validation landed on main at 1dfadb5: backup and live snapshots now share one fail-closed immutable-history validator. App Group, CloudKit and Watch writers remain capability- and signed-device-gated.

Owner-controlled gates

Apple account credentials, 2FA, paid membership, App ID/iCloud container changes, CloudKit production schema, TestFlight/App Store publication, and irreversible provider actions require explicit owner participation when reached.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions