- live testing against a real WeKan v9.36 found that the driver decodes
nested extra.ticketingIdentities as bson.D, so identity lookups silently
returned empty and consultants were skipped; handle bson.D/bson.M/map
- integration regression test pinning the BSON round trip
- opt-in live test (go test -tags=wekanlive) verifying TestConnection,
FetchUpdated (assignee + member fallback), key listing, since-filter and
unknown-identity rejection against a real instance
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- task domain model + exhaustive §4.4 status machine tests (single source of truth)
- per-customer polling workers reconciled every 30s from the customers
collection; panic-safe runs; manual sync-now trigger; status provider
for the admin panel
- §5.3 upsert keyed on (system, key, customerId): refreshes content while
status=imported, records upstream_changed timeline + notification after
- attachments cached into GridFS via connector-authorized downloads
- orphaned tickets flagged with timeline + consultant notification, never
deleted; idempotent across polls
- consultant identity from users.extra.ticketingIdentities per system
- notifications store (insert/list/unread-count/mark-read)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>