Commit Graph
32 Commits
Author SHA1 Message Date
thomas c32fd02abc docs(specs): review dashboard epic US-30..US-36 and section 7 design
user-stories.md: new epic with 7 stories (static serving, config
metadata route, configurable table, bulk edit, detail page, dry-run with
its two exclusive modes, full-correction route); US-5x (config editor)
replaces US-3x in the deferred list; US-3x references updated.
arch.md: section 7 restructured (7.1 list, 7.2 detail, 7.3 application
routes with the config/pdf/dry-run/correct contracts, 7.4 standard UI
hooks); section 10 notes the future gate coverage of these routes.
2026-11-07 11:55:55 +01:00
thomas 33b278af0d docs(arch): review dashboard as static files in pb_public
The dashboard is a static frontend (no build toolchain, vendored JS) served
by PocketBase's built-in static file serving from pb_public/ shipped in
the image. The browser persists through the standard API and its hooks;
only the PDF stream, the FTS5 search and the dry-run go through dedicated
JSON routes. Overview, stack, section 7 and packaging updated.
2026-11-07 10:53:55 +01:00
thomas b716d3d94d feat(setup): add the standard created/updated autodate columns
Both collections are created programmatically, so PocketBase's default
created/updated autodate fields were absent and the admin UI showed no
creation/modification dates. Declared explicitly on documents (re-added
each start like the other fixed columns, protected from the config
cleanup) and on document_events at creation. The authoritative history
remains document_events.
2026-11-04 22:37:32 +01:00
thomas 7b25b7b144 feat(ui): US-22 becomes a side-effect-free draft correction; add US-24 S3 deletion
US-22: the PocketBase UI edits one field at a time with no preview of
the final name, so a field edit now persists the values with no template
evaluation, no re-filing and no status change; the corrected event carries
the field diff alone. The full correction (all fields, dry-run, re-filing,
validation) moves to the custom dashboard (US-3x).
US-24: deleting a documents record deletes the S3 object at file_key first;
the cascade delete removes the history. Spec, hooks, E2E updated together.
2026-11-04 22:08:31 +01:00
thomas 6961256538 refactor(config): rename the period helper to frPeriod
The helper renders French period labels (Janvier 2026, T2 2026, S1 2026),
so it carries the fr prefix like frDate. Config example, arch.md and
user-stories.md updated. Configs calling period(...) must switch to
frPeriod(...).
2026-11-04 22:00:36 +01:00
thomas f8734f79ca feat(docker): update Dockerfile to include git and adjust file copying structure
fix(docs): update Garage image version in README and architecture documentation

fix(e2e): change default Garage image version in e2e tests and improve directory handling

fix(s3): skip adding inbox directory markers in S3 listing

fix(main): set HTTP address argument correctly for the application
2026-11-04 21:56:44 +01:00
thomas 4baf2f3368 feat(events): store before/after as diffs, not full snapshots
AppendEvent now reduces the before/after snapshots to the changed keys:
identical values on both sides are omitted, a key on one side only is an
addition or a deletion. The imported, corrected and validated payloads all
follow the same rule (an import is a diff from nothing, a validation keeps
carrying the status alone). arch.md section 4 updated accordingly.
2026-11-03 23:05:34 +01:00
thomas 5d09e7a780 feat(config): add frDate helper for French natural-language dates
Go date layouts only know English month names, so date(value, layout)
cannot parse "le 19 janvier 2026". frDate(text) extracts and parses such
dates (day optional, abbreviated months, accents optional) into a native
date; no match is a rule error routing the document to pending/.

Documented in arch.md §5, covered by unit tests.
2026-11-03 22:56:47 +01:00
thomas 6f94674fc9 archivist: migrate to PocketBase v0.41.1 (module ganigeorgiev.com/pocketbase/pocketbase); dbx moved to ganigeorgiev.com/pocketbase/dbx; go 1.27 and golang:1.27-alpine builder 2026-11-03 21:01:00 +01:00
thomas 7829d73cd4 archivist: scratch runtime Dockerfile (static binary only, non-root, CA bundle + tzdata); .dockerignore; README build section; arch.md packaging; fix ARCHIVIST_HTTP_ADDR doc row 2026-11-02 13:28:50 +01:00
thomas 233c153072 archivist: single-file E2E regression gate (Garage + image under test); superuser-only poll route; ARCHIVIST_S3_REGION 2026-11-02 12:28:58 +01:00
thomas 67c337eb14 archivist: runtime logs through PocketBase logger (Dashboard > Logs); stderr kept for pre-bootstrap fatals 2026-11-02 11:27:00 +01:00
thomas fd35991397 archivist: versioning no longer required, warning at startup instead (recommended) 2026-11-02 11:11:59 +01:00
thomas 7de824d797 archivist: correction and validation through the standard PocketBase UI via the update hook 2026-11-01 22:52:40 +01:00
thomas fe9ba799b9 archivist: document firstMatch empty-string semantics, interrupted-filing recovery, log-only duplicates 2026-11-01 18:37:27 +01:00
thomas d6cf724878 archivist: move status into before/after snapshots in document_events payloads 2026-11-01 16:15:04 +01:00
thomas b4e7c983a8 archivist: document document_events payload format (imported/corrected/validated) 2026-11-01 16:11:04 +01:00
thomas 348c69224d archivist: drop original_filename and size columns 2026-11-01 11:54:40 +01:00
thomas bfc02c626f archivist: firstMatch takes a pages expression, not page numbers 2026-11-01 11:51:42 +01:00
thomas 7e1b53adf0 archivist: page-by-page text storage and firstMatch pages argument 2026-11-01 11:45:04 +01:00
thomas 21d727c9a3 archivist: use backtick raw strings in expression examples 2026-11-01 11:37:51 +01:00
thomas 84557434d4 archivist: document period() helper for period-based naming 2026-11-01 11:23:40 +01:00
thomas 8eb69367c0 archivist: templates keep {expr} placeholders whose content is an expr expression 2026-11-01 11:13:29 +01:00
thomas a17de3c004 archivist: drop custom parseDate helper, use expr standard date(value, layout) builtin 2026-11-01 11:07:12 +01:00
thomas 36d79a188d archivist: field types (text/number/date/boolean/enum), native time.Time dates, parseDate helper, enum vocabulary dropdown 2026-11-01 11:05:30 +01:00
thomas 105a762579 archivist: rule structure (when/set/delete/rules), eval expressions, firstMatch helper, date normalization 2026-10-31 11:05:04 +01:00
thomas dd20b63a79 archivist: correction implies validation, save blocked on unresolvable template, template renders full path 2026-10-30 14:56:03 +01:00
thomas 99c3d4a050 archivist: explicit filing order, extraction failure reason in classified event, drop redundant timestamps 2026-10-30 14:45:18 +01:00
thomas b01e19534c archivist: template as a declared field, first-page-only rule context, duplicate handled via logs 2026-10-30 14:37:36 +01:00
thomas 6f65fe141d archivist: drop lists section, template chosen via rules, log-based rule trace, crash-safe pipeline ordering 2026-10-30 14:28:36 +01:00
thomas a605299af7 archivist: fix brief/architecture inconsistencies (rules context, duplicates, pending re-filing, config reload, FTS, history) 2026-10-30 14:12:31 +01:00
thomas f46245befe Add files via upload 2026-10-30 13:54:26 +01:00