Keep the public tree project-generic. Business/one-off tools, deployment
and business docs move to the private oo-workspace repo.
Moved to oo-workspace:
- cmd/ooscan, cmd/pdfamount, cmd/kontoblatt, cmd/kontolink
- internal/xlspipe (cutover-portugal workbook) -> oow workbook build
(drops the --template/--title flags from oo docs put-xlsx)
- deploy/docker-compose.rclone-webdav.yml + docs/rclone-webdav.md
- docs/crm-associations.md
Removed GitHub-era leftovers:
- .github/workflows/release-please.yml, release-please-config.json,
.release-please-manifest.json (tags are created on Gitea per SemVer)
Naming: the FileStore subsystem is now filestore_*.go (was file_*.go) to
match files_*.go (project Documents). Docs/AGENTS/README updated.
Promote the generic, reusable parts of the private oo-workspace into the
public library/CLI, so oo-workspace can shrink to business glue.
- board.go: Board types + (c *Client) SyncBoard — upsert project
milestones/tasks by exact title from a YAML board (dry-run when
apply=false). CLI: oo projects board-sync.
- crm_audit.go: OpportunityAudit + (c *Client) AuditOpportunities —
file/task/member counts with a generic class (ok|dup|empty|junk-title).
CLI: oo crm audit [--out].
- catalog/names.go: CleanPersonNames / GuessNameFromEmail /
FormatProjectTitle (ported from oo-workspace).
- catalog: adopt the newer apply/match logic — name repair (never encode
company in lastName), company grouping key, contact-info type
normalization, preserve an already-applied oo_id. Keeps the local
Address/OOProjects fields and the config-driven classifier.
Business-only oo-workspace commands (crm clean/migrate, folders, search)
deliberately stay private.
The conversion / link / sheet commits predate the tree cleanup, so their
comments and README/test examples still carried internal refs. Re-apply
the genericization (no internal hosts, personal names or client file ids).
- link: print Products/Files/DocEditor.aspx?fileid=… deep links (title+url)
- lib: FileEditorURL/FolderURL helpers (+tests)
- users check: verify credentials (userName vs email) via authentication.json
- projects files replace-in FOLDER_ID FILE...: hard delete same stem|ext in a
folder + fresh upload → single clean version (no version history)
Showroom-safe: the tree no longer carries internal hosts, IPs, ports,
personal names, client domains or client file names. Behaviour is
unchanged and now supplied per deployment.
- catalog: hardcoded mail-org / project classifiers become a YAML-driven
Classifier (OO_CATALOG_CONFIG or --config); neutral default classifies
nothing as work. New catalog/classify.go + example + tests.
- storage_fallback: drop the baked-in MinIO endpoint IP; require
MINIO_ENDPOINT (+ keys) from the env.
- kontolink: build DocEditor links from $ONLYOFFICE_URL instead of a
hardcoded portal host; kontoblatt: no client file id in the output name.
- oo: load .env CLI-wide (bootstrap.LoadEnv in execute) so
non-authenticating commands (catalog scans) also see config.
- genericize comments/docs/fixtures (AGENTS, README, .env.example,
crm-associations, catalog tests, ES/pdfattach tests, mails).
- Route HTTP helpers (getJSON/formRequest/deleteReq/postJSON/putJSON/
multipart upload), Query and AuthenticateContext/ensureToken through the
deterministic 429/502/503/504 retry (retryRaw), so the integration suite
no longer fails on the shared openresty rate limit under parallel runs.
- Fix stale cmd/office/fetch integration test: loader.TaskFields was
replaced by loader.DetailForm (broke go vet -tags=integration).
- Add unit tests for Transient/DoRetry.
- FileClient composes FileStore/Searcher backends; Read()/Write()/Search()
select REST/DAV/PG/ES with transient read fallback. Client.Files() returns
it and *FileClient implements FileStore, so existing callers keep working.
- Entry gains backend-native Updated + folder FilesCount/FoldersCount so
dav ls output round-trips.
- cmd/oo dav/projects files and cmd/office/fetch download/preview/delete go
through FileStore; oo search goes through the facade.
- Mark transport methods that FileStore now abstracts as deprecated.
- Строки с %/MwSt/USt/Prozent/Steuer больше не дают сумму (было: Storchen
19,00 % -> amount 19.00 и ложная отбраковка кандидатов в матчере).
- Приоритет меток: zu zahlender betrag > rechnungsbetrag > rechnungsendbetrag
> gesamtbetrag > gesamtsumme (inkl. Steuern); low-priority не перебивает.
- DKV: секция Gesamtsummenaufstellung (значение после «»») важнее повторяющихся
TOTAL-строк по машинам.
- Тесты: 19,00 % не сумма; fallback на usable-метку; DKV-итог.
Match more payable-amount labels by priority and accept DE/EN/plain
number formats, normalising to a dot-separated 2-decimal string. Adds
unit tests with synthetic DKV-style and Diashop-style lines.
OnlyOffice allows duplicate stem|ext in the same folder; agents hit this
via projects files upload and put-md without --folder. Default all upload
paths to replace-by-stem, add no-clobber via --no-replace, and scan
projectFolder in dedupe.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add oo docs optimize for native-text PDFs (OO-friendly rewrite without
ocrmypdf overlay). Default ocr --force to false when text layer exists.
Co-authored-by: Cursor <cursoragent@cursor.com>
TxtToMarkdown uses markdown hard breaks so pandoc keeps each source
line on its own row. Adds oo docs put-txt and projects files alias.
Co-authored-by: Cursor <cursoragent@cursor.com>
UploadToFolderReplacing deletes same-stem files before upload (--replace,
default true). OO may still display title+fileExst as double extension.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Client.SendMail: PUT /api/2.0/mail/messages/send.json, omits empty cc/bcc
- oo mails send subcommand with --id/--to/--subject/--body/--cc/--bcc
- guard: sending by --id without --body errors (send.json does not copy
subject/body from the draft; prevents empty emails)
- unit test: empty cc/bcc omitted, correct path
This exposes the canonical attachment download path via oo mails so downstream tools like 2dph can migrate off local OnlyOffice mail adapters without taking a direct module dependency first.
The catalog feature (approved ASR-0014) was lost during the GitHub history
rewrite: the merge commit on main is empty and the code only survived on the
old gitea-history branches (no merge base with main). Port catalog/* and the
oo catalog CLI verbatim; drop the library-only applications package whose
Sync() created the 'Write application'/'Apply application'/'Send CV' CRM
task spam (23k+ tasks deleted 2026-08-18).