Fixed a few minor bugs
This commit is contained in:
37
README.md
37
README.md
@@ -1,8 +1,8 @@
|
||||
# TimeLog
|
||||
|
||||
Offline-first PWA for tracking hours on site. The day starts and ends on its own, each
|
||||
task begins where the previous one ended, and the app's main output is a concise
|
||||
summary of the last working day, ready to copy into a paper logbook.
|
||||
Offline-first PWA for tracking hours on site. While the app is running, it can start
|
||||
the day automatically and prompt for its end. Each task begins where the previous
|
||||
one ended. Closed days have concise summaries ready to copy into a paper logbook.
|
||||
|
||||
Built for use outdoors: high contrast, large targets, usable with gloves on. All data
|
||||
stays on the device (IndexedDB); there is no backend and nothing is uploaded.
|
||||
@@ -12,7 +12,7 @@ stays on the device (IndexedDB); there is no backend and nothing is uploaded.
|
||||
```sh
|
||||
npm install
|
||||
npm run dev # http://localhost:5173
|
||||
npm test # unit tests for the time, prediction, resume and boundary logic
|
||||
npm test # unit and IndexedDB regression tests
|
||||
npm run check # svelte-check
|
||||
npm run build # production build into dist/
|
||||
```
|
||||
@@ -58,6 +58,29 @@ les fichiers invalides, la fusion, le remplacement et l'annulation transactionne
|
||||
sur une IndexedDB simulée. `src/lib/fixtures/backup.json` est le jeu d'essai fourni ;
|
||||
il n'est pas publié avec l'application.
|
||||
|
||||
## Journées, reprise et historique
|
||||
|
||||
- Une journée oubliée est clôturée au retour dans l'application, à son heure de
|
||||
fin prévue (prolongations comprises), sans jamais précéder la dernière activité
|
||||
enregistrée. Cette heure est une estimation : l'application ne mesure pas le
|
||||
travail lorsqu'elle est fermée. Le dernier poste conserve ainsi sa durée jusqu'à
|
||||
cette limite, au lieu d'être ramené à zéro.
|
||||
- Une journée terminée propose **Reprendre la journée**. Cela annule sa clôture et
|
||||
continue le dernier poste, client et déjeuner conservés. Le temps écoulé depuis
|
||||
l'arrêt est compté dans ce poste : la reprise corrige une clôture prématurée.
|
||||
- La création, la clôture et la reprise sont transactionnelles. Les actions
|
||||
simultanées sur le même poste ne créent pas de doublons ; une journée clôturée
|
||||
ne peut pas recevoir un nouveau poste actif. La purge épargne les journées
|
||||
actives et conserve toujours la dernière journée terminée.
|
||||
- Les horaires de déjeuner affichent un rappel puis une heure indicative de
|
||||
reprise, calculée depuis le début réel de la pause. Les transitions restent
|
||||
manuelles : aucun temps de travail n'est transformé automatiquement en pause.
|
||||
- Dans **Récap**, le sélecteur **Journée à consulter** permet d'afficher et de copier
|
||||
chaque journée terminée encore conservée, y compris les journées importées.
|
||||
|
||||
Les tests couvrent notamment les clôtures oubliées, les reprises, les appels
|
||||
concurrents, les retours d'horloge, les échecs transactionnels et la conservation.
|
||||
|
||||
In dev the console exposes `timelog.seed()` to generate 20 days of realistic history
|
||||
(useful for exercising the suggestion engine) and `timelog.wipe()` to clear it.
|
||||
|
||||
@@ -132,6 +155,6 @@ src/lib/
|
||||
day.svelte.js day lifecycle state machine
|
||||
```
|
||||
|
||||
The four pure modules hold the logic worth testing and carry the unit tests. `db.js`
|
||||
concentrates every write that touches a boundary into `closeAndStart` and
|
||||
`setEntryStart`, so the timeline cannot drift out of order from anywhere else.
|
||||
Pure helpers and database/lifecycle operations have regression tests. `db.js`
|
||||
keeps day and entry changes in shared transactions, including creation, closure,
|
||||
reopening and boundary corrections.
|
||||
|
||||
Reference in New Issue
Block a user