Commit Graph
208 Commits
Author SHA1 Message Date
thomas 9d8b560bac feat(dashboard) review UI: static pages, Beszel-styled CSS and vanilla JS (US-30, US-32..36) 2026-11-07 19:27:59 +01:00
thomas b7bfe1152a feat(routes) config, pdf proxy, dry-run and correct routes + e2e coverage (US-31, US-34..36) 2026-11-07 19:18:34 +01:00
thomas 2ba78724cc docs(dashboard) Beszel design reference for dashboard CSS 2026-11-07 19:03:42 +01:00
thomas f461d0874f docs(archivist): default table columns = mandatory fields + status + file_key 2026-11-07 12:21:59 +01:00
thomas 81f194d492 docs(archivist): default table columns = mandatory fields + status + file_key 2026-11-07 12:21:52 +01:00
thomas 82ad4d1cdf docs(archivist): reformat section 5 into readable bullet lists 2026-11-07 12:15:57 +01:00
thomas faee46d60b docs(archivist): sha256 unique-indexed column; draft save allowed despite render errors 2026-11-07 12:13:50 +01:00
thomas 80070be503 docs(archivist): allow draft save when rendered name has errors (align with US-22/US-35) 2026-11-07 12:13:42 +01:00
thomas ddf4b7bfe8 docs(archivist): align US-01 env var to ARCHIVIST_HTTP_ADDR 2026-11-07 12:13:25 +01:00
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 b1a37bc29b archivist: add scripts/import_meta_files.py to import pre-existing filed documents into PocketBase 2026-11-04 22:20:45 +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 320b030bde fix(config): guard the emission-date probes against absent formats
The generic emissionDate rule ran unconditionally: on a document whose
date is not numeric (e.g. "le 19 janvier 2026"), date(firstMatch(...))
errored on the empty match and routed a correctly classified document to
pending/. Each format probe now checks for its own format first, and a
frDate fallback handles French natural-language dates.
2026-11-03 23:12:45 +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 09d0c9b99b fix(pipeline): skip rule evaluation when PDF extraction fails (US-13)
An unreadable PDF was still passed to cfg.Evaluate with nil pages, producing
a cascade of spurious errors (index out of range on pages[0], missing
mandatory fields) in the imported event. Route straight to pending/ with the
extraction failure as the single error.
2026-11-03 22:53:16 +01:00
thomas 02f7fd99bb Corrections after first run 2026-11-03 22:36:27 +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 1cbe96b173 archivist: fix README spacing before Troubleshooting section 2026-11-02 11:27:57 +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 61586a670a archivist: clarify Remove() comment re optional versioning 2026-11-02 11:13:02 +01:00
thomas 3bba6a82db archivist: versioning check becomes a startup warning in code 2026-11-02 11:12:31 +01:00
thomas 72fe21c9c1 archivist: brief aligned with versioning-optional decision 2026-11-02 11:12:23 +01:00
thomas 20385eafca archivist: README aligned with versioning-optional decision 2026-11-02 11:12:15 +01:00
thomas e667ee7203 archivist: US-01/US-12/US-17 aligned with versioning-optional decision 2026-11-02 11:12:08 +01:00
thomas fd35991397 archivist: versioning no longer required, warning at startup instead (recommended) 2026-11-02 11:11:59 +01:00
thomas 24b22c5815 archivist: render template from stored fields when recovering interrupted filings 2026-11-01 23:02:52 +01:00
thomas a9b4fa5eca archivist: initial Go implementation of the written user stories (US-01..US-23) 2026-11-01 23:02:24 +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 ce19e97711 archivist: allow document correction and validation through the standard PocketBase UI via the update hook (US-22, US-23) 2026-11-01 22:52:32 +01:00
thomas d04134d8cd archivist: enforce document_events append-only via request hooks instead of API rules (superusers bypass rules) 2026-11-01 22:46:02 +01:00
thomas a2f448873a archivist: add user stories for startup, configuration, polling/classification and PocketBase UI visualization 2026-11-01 19:16:17 +01:00
thomas a9d6af7f9c archivist: add user-facing README (docker deployment, configuration, dashboard) 2026-11-01 18:43:34 +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 b6f23a30f9 archivist: firstMatch examples use pages expressions 2026-11-01 11:51:49 +01:00
thomas bfc02c626f archivist: firstMatch takes a pages expression, not page numbers 2026-11-01 11:51:42 +01:00
thomas 3b743345f1 archivist: update examples for pages array and firstMatch scope 2026-11-01 11:45:11 +01:00
thomas 7e1b53adf0 archivist: page-by-page text storage and firstMatch pages argument 2026-11-01 11:45:04 +01:00
thomas e080bc3069 archivist: brief wording for page-based extraction 2026-11-01 11:44:57 +01:00
thomas 21d727c9a3 archivist: use backtick raw strings in expression examples 2026-11-01 11:37:51 +01:00
thomas fe497fb6d8 archivist: document period() and use it in bank statement example 2026-11-01 11:23:48 +01:00