3.7 KiB
3.7 KiB
redmine contacts + project-standardization plan
Scope: standardize this repository around the shared PROJECT.md workflow and improve redmine_contacts.py so contact review/update work can be done in controlled batches with less API/UI friction.
Target stopping point for this phase: deliver tested CLI upgrades for filtering/show/update ergonomics, plus research documentation for duplicate-contact merge feasibility.
Checklist
Contact tooling foundation
- Apply shared project template to
/home/jason/projects/redmine/PROJECT.mdwith redmine-specific rules. - Create continuity docs (
PLAN.md,HANDOFF.md) for ongoing milestone handoff. - Add tests for new
redmine_contacts.pycontact-filter + tag/custom-field patch behavior. - Implement date/tag contact filtering utilities used by
fetchandsearch. - Add
showcommand with cache/api source control. - Add
issue-fullcommand that composes full Redmine issue data with helpdesk ticket/messages. - Add
updateenhancements:--add-tag--remove-tag--set-custom-field <kebab-case-name>=<value>
- Verify new unit tests pass and script compiles.
- Document duplicate-contact merge feasibility (API support vs scripted browser-equivalent merge path).
- Add config-vault project index entry for redmine workstream.
- Decide and implement default fetch cache behavior:
fetchnow caches full fetched contacts by default;--cache-mode filteredopt-in stores only filtered subset. - Add live integration validation against LAN Redmine copy (
192.168.50.170) for new commands requiring API responses. - Add dry-run-first
batch-updatecommand for "N contacts matching filters" workflows. - Add controlled ordering options for batch runs (
--orderincluding oldest-updated-first) to support systematic sweep-through campaigns. - Expand argparse
--helpoutput with clearer descriptions/option help across commands. - Add Bash completion script:
/home/jason/projects/redmine/redmine_contacts_completion.sh. - Capture the broader contact triage loop workflow in project docs (including scoring concept + diagram).
- Make
fetchintuitive: with filters and default--cache-mode auto, cache filtered results by default (override with--cache-mode full). - Implement Phase 1 contact loop tracer: per-contact evidence pull (3-5 recent tickets/messages) + scoring output in dry-run mode.
Ticket-centric spam cleanup substrate
- Plan ticket-centric sync/search/action architecture in
docs/ticket_sync_tool_plan.md. - Implement
redmine_tickets.pyincremental sync using standard Redmine issue API withinclude=journals,helpdesk. - Implement per-ticket JSON cache plus state-store abstraction (
ManifestTicketStateStorenow, SQLite-capable seam later). - Implement cached
searchcommand. - Implement idempotent
spam-checkaction. - Implement dry-run-first
close-if-spamaction with recent sender/contact lookback. - Ensure Redmine write calls can impersonate users via
X-Redmine-Switch-User. - Default spam cleanup writes to
--impersonate-user rebot(Harry Botter), while reads/dry-runs do not impersonate. - Verify LAN dry-run against
192.168.50.170/customer-service:#41788and#41789flagged and closure-planned. - Document complete handoff in
docs/ticket_spam_cleanup_handoff_2026-07-09.md. - Confirm LAN issue
status_id=5is the desired closed status. - Run
close-if-spam --applyon LAN for the currently planned spam tickets only. - Re-sync/inspect LAN tickets to verify status closed, activity author
rebot, and second apply is idempotent. - After LAN apply verification, expand cache/sync batch size beyond the first 10 tickets.