Refresh roadmap after Helpdesk validation
This commit is contained in:
@@ -146,6 +146,12 @@ Planned/implemented locally but not fully LAN-validated as a complete workflow:
|
||||
- `journal_message.created`
|
||||
- `journal_message.updated`
|
||||
|
||||
The Helpdesk user workflow itself is now live-smoke-tested, including inbound
|
||||
Mailpit import, `issueWithHelpdesk()` metadata, default non-email updates, and
|
||||
explicit customer-visible Helpdesk replies. The remaining gap is validating that
|
||||
those same controlled actions produce the expected outbox rows and derived
|
||||
worker documents.
|
||||
|
||||
### 3. Local Helpdesk Plugin Fork Changes
|
||||
|
||||
We made targeted changes to the local fork of `redmine_contacts_helpdesk`:
|
||||
@@ -279,6 +285,19 @@ If Mailpit moves, pass the host that Redmine can reach:
|
||||
./reset_helpdesk_mail_settings.py --mailpit-host 192.168.50.170
|
||||
```
|
||||
|
||||
### 8. redMCP Helpdesk Semantics
|
||||
|
||||
The redMCP wrapper now makes Helpdesk behavior explicit:
|
||||
|
||||
- `issueWithHelpdesk()` composes normal issue data with Helpdesk ticket/message
|
||||
metadata.
|
||||
- `updateIssue()` is safe by default and does not send customer email.
|
||||
- `updateIssue(..., ['send_helpdesk_email' => true])` and
|
||||
`sendHelpdeskIssueResponse()` deliberately use the Helpdesk email path.
|
||||
|
||||
The live smoke test verifies both default non-email updates and explicit
|
||||
customer-visible replies through Mailpit.
|
||||
|
||||
## LAN Deployment Progress
|
||||
|
||||
The LAN Redmine copy at `192.168.50.170` was inspected and updated via SSH.
|
||||
@@ -304,16 +323,18 @@ The deployed helpdesk search routes were verified with:
|
||||
|
||||
## What Is Not Finished Yet
|
||||
|
||||
### 1. The Real Worker/Indexer
|
||||
### 1. Worker Validation
|
||||
|
||||
This is the main unfinished piece.
|
||||
This is the next implementation milestone.
|
||||
|
||||
Still needed:
|
||||
|
||||
- run and document end-to-end validation of `redmine_outbox_worker.py` against
|
||||
the LAN copy
|
||||
- decide the first real external index target
|
||||
- map the derived JSONL document shape into that index
|
||||
controlled Helpdesk activity on the LAN copy
|
||||
- prove that imported Helpdesk issues, Helpdesk replies, and normal issue
|
||||
updates create the expected event rows
|
||||
- verify the derived JSONL document shape is useful and does not leak unsafe
|
||||
content
|
||||
|
||||
### 2. External Search Index
|
||||
|
||||
@@ -326,17 +347,10 @@ Planned direction:
|
||||
- ticket-level docs for "which issue mentioned this?"
|
||||
- message-level docs for "how did we handle a similar case?"
|
||||
|
||||
### 3. Full Helpdesk Event Validation
|
||||
This should wait until the worker validation pass has documented the derived
|
||||
document shape that will feed the index.
|
||||
|
||||
The local code includes helpdesk outbox hooks and read-only helpdesk API
|
||||
changes, but the complete create/update test matrix for:
|
||||
|
||||
- `helpdesk_ticket.*`
|
||||
- `journal_message.*`
|
||||
|
||||
still needs to be run and documented cleanly on the LAN copy.
|
||||
|
||||
### 4. Pre-Existing UI/Plugin Bugs
|
||||
### 3. Pre-Existing UI/Plugin Bugs
|
||||
|
||||
We discovered old plugin issues while working:
|
||||
|
||||
@@ -356,6 +370,8 @@ Project docs:
|
||||
|
||||
- [docs/event_outbox_spec.md](/home/iadnah/redmine/docs/event_outbox_spec.md:1)
|
||||
- [docs/redmineup_local_fork_changelog.md](/home/iadnah/redmine/docs/redmineup_local_fork_changelog.md:1)
|
||||
- [docs/helpdesk_smoke_test.md](/home/iadnah/redmine/docs/helpdesk_smoke_test.md:1)
|
||||
- [docs/test_instance_post_import.md](/home/iadnah/redmine/docs/test_instance_post_import.md:1)
|
||||
- [docs/pre_existing_issues.md](/home/iadnah/redmine/docs/pre_existing_issues.md:1)
|
||||
|
||||
Tooling:
|
||||
@@ -372,16 +388,15 @@ Local plugin work:
|
||||
|
||||
If continuing this project, the next best work is:
|
||||
|
||||
1. Stop treating the CLI exporter as the end product.
|
||||
2. Build the external worker that consumes `event_outbox_events`.
|
||||
3. Start with a simple derived output target:
|
||||
- JSONL
|
||||
- SQLite
|
||||
- or local files
|
||||
4. Then connect that worker to:
|
||||
- Qdrant
|
||||
- OpenAI embeddings
|
||||
5. Validate end-to-end helpdesk search using real historical message data.
|
||||
1. Run the post-import validator and Helpdesk smoke test to establish a clean
|
||||
baseline.
|
||||
2. Generate controlled Helpdesk activity in `fud-helpdesk`.
|
||||
3. Inspect `event_outbox_events` for the corresponding issue, journal,
|
||||
Helpdesk ticket, and journal message rows.
|
||||
4. Run `redmine_outbox_worker.py --dry-run --batch-size 10` and document the
|
||||
derived JSONL output shape.
|
||||
5. Process a bounded batch only after the dry-run output is correct.
|
||||
6. Choose the first external index target after the worker output is validated.
|
||||
|
||||
## Practical Commands
|
||||
|
||||
@@ -452,4 +467,6 @@ is the authoritative customer communication layer, plus the first safe event and
|
||||
export tooling around it.
|
||||
|
||||
The repo is now at the point where the next meaningful leap is an external
|
||||
worker/indexer, not more Redmine UI surface.
|
||||
worker validation pass, not more Redmine UI surface. The Qdrant/OpenAI index
|
||||
work should follow once the worker output is proven against controlled Helpdesk
|
||||
activity.
|
||||
|
||||
@@ -37,10 +37,11 @@ while debugging:
|
||||
The final output should include:
|
||||
|
||||
```text
|
||||
[OK] redMCP issueWithHelpdesk returned ticket and message context
|
||||
[OK] redMCP issueWithHelpdesk returned Helpdesk ticket context
|
||||
[OK] redMCP default issue update did not send Helpdesk email
|
||||
[OK] redMCP non-Helpdesk CRUD control passed
|
||||
[OK] Mailpit received outbound Helpdesk/Redmine mail containing the reply token
|
||||
[OK] redMCP issueWithHelpdesk returned post-reply journal message context
|
||||
[OK] Closed smoke-test Helpdesk issue
|
||||
Smoke test passed.
|
||||
```
|
||||
|
||||
@@ -25,11 +25,36 @@ environment. Before risky edits, archive the current plugin directories in
|
||||
LAN Redmine copy.
|
||||
- Short alias/usage routes were added to avoid noisy routing errors during
|
||||
manual browser testing.
|
||||
- Full end-to-end helpdesk outbox validation is still pending.
|
||||
- Helpdesk mail import, Helpdesk metadata lookup, default non-email updates,
|
||||
and explicit outbound Helpdesk replies are live-smoke-tested through redMCP.
|
||||
- Helpdesk outbox/worker validation is still pending.
|
||||
- Next meaningful milestone:
|
||||
- Build the external worker/indexer that consumes `event_outbox_events`,
|
||||
enriches via read-only MySQL joins, and emits deterministic ticket/message
|
||||
documents for external indexing.
|
||||
- Validate `redmine_outbox_worker.py` end to end against controlled Helpdesk
|
||||
activity, document the derived JSONL shape, then choose the external index
|
||||
target.
|
||||
|
||||
## 2026-04-24 - Helpdesk/redMCP Smoke Validation
|
||||
|
||||
- Touched areas:
|
||||
- `redMCP`
|
||||
- Helpdesk test tooling
|
||||
- Purpose:
|
||||
- Prove the LAN test instance can import a Helpdesk email, expose its
|
||||
Helpdesk metadata through redMCP, update a non-Helpdesk control issue, send
|
||||
an explicit Helpdesk reply, and verify outbound delivery through Mailpit.
|
||||
- Make customer-visible Helpdesk email opt-in in redMCP.
|
||||
- Behavior clarified:
|
||||
- `RedMCP\RedmineClient::updateIssue()` uses the normal Redmine REST API and
|
||||
does not send a Helpdesk email by default.
|
||||
- `updateIssue(..., ['send_helpdesk_email' => true])` and
|
||||
`sendHelpdeskIssueResponse()` deliberately use the Helpdesk email path.
|
||||
- LAN test result:
|
||||
- `./helpdesk_smoke_test.py` passed against `fud-helpdesk` and
|
||||
`fud-nohelpdesk`.
|
||||
- The smoke test verifies that a default issue update does not send Mailpit
|
||||
mail, while an explicit Helpdesk response does.
|
||||
- Latest documented passing run created and closed controlled Helpdesk issue
|
||||
`#39871`.
|
||||
|
||||
## 2026-04-24 - POP3 Get Mail Compatibility Fix
|
||||
|
||||
|
||||
@@ -132,8 +132,9 @@ After the post-import checks pass, run the live Helpdesk/redMCP smoke test:
|
||||
```
|
||||
|
||||
This imports a controlled Helpdesk email, verifies `issueWithHelpdesk()`, checks
|
||||
non-Helpdesk CRUD, verifies outbound Mailpit delivery, and closes the created
|
||||
test ticket. Details are in `docs/helpdesk_smoke_test.md`.
|
||||
non-Helpdesk CRUD, confirms default updates do not send Helpdesk email, verifies
|
||||
explicit outbound Mailpit delivery, and closes the created test ticket. Details
|
||||
are in `docs/helpdesk_smoke_test.md`.
|
||||
|
||||
## 8. Re-Run The Read-Only Validator
|
||||
|
||||
|
||||
Reference in New Issue
Block a user