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.created`
|
||||||
- `journal_message.updated`
|
- `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
|
### 3. Local Helpdesk Plugin Fork Changes
|
||||||
|
|
||||||
We made targeted changes to the local fork of `redmine_contacts_helpdesk`:
|
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
|
./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
|
## LAN Deployment Progress
|
||||||
|
|
||||||
The LAN Redmine copy at `192.168.50.170` was inspected and updated via SSH.
|
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
|
## 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:
|
Still needed:
|
||||||
|
|
||||||
- run and document end-to-end validation of `redmine_outbox_worker.py` against
|
- run and document end-to-end validation of `redmine_outbox_worker.py` against
|
||||||
the LAN copy
|
controlled Helpdesk activity on the LAN copy
|
||||||
- decide the first real external index target
|
- prove that imported Helpdesk issues, Helpdesk replies, and normal issue
|
||||||
- map the derived JSONL document shape into that index
|
updates create the expected event rows
|
||||||
|
- verify the derived JSONL document shape is useful and does not leak unsafe
|
||||||
|
content
|
||||||
|
|
||||||
### 2. External Search Index
|
### 2. External Search Index
|
||||||
|
|
||||||
@@ -326,17 +347,10 @@ Planned direction:
|
|||||||
- ticket-level docs for "which issue mentioned this?"
|
- ticket-level docs for "which issue mentioned this?"
|
||||||
- message-level docs for "how did we handle a similar case?"
|
- 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
|
### 3. Pre-Existing UI/Plugin Bugs
|
||||||
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
|
|
||||||
|
|
||||||
We discovered old plugin issues while working:
|
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/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/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)
|
- [docs/pre_existing_issues.md](/home/iadnah/redmine/docs/pre_existing_issues.md:1)
|
||||||
|
|
||||||
Tooling:
|
Tooling:
|
||||||
@@ -372,16 +388,15 @@ Local plugin work:
|
|||||||
|
|
||||||
If continuing this project, the next best work is:
|
If continuing this project, the next best work is:
|
||||||
|
|
||||||
1. Stop treating the CLI exporter as the end product.
|
1. Run the post-import validator and Helpdesk smoke test to establish a clean
|
||||||
2. Build the external worker that consumes `event_outbox_events`.
|
baseline.
|
||||||
3. Start with a simple derived output target:
|
2. Generate controlled Helpdesk activity in `fud-helpdesk`.
|
||||||
- JSONL
|
3. Inspect `event_outbox_events` for the corresponding issue, journal,
|
||||||
- SQLite
|
Helpdesk ticket, and journal message rows.
|
||||||
- or local files
|
4. Run `redmine_outbox_worker.py --dry-run --batch-size 10` and document the
|
||||||
4. Then connect that worker to:
|
derived JSONL output shape.
|
||||||
- Qdrant
|
5. Process a bounded batch only after the dry-run output is correct.
|
||||||
- OpenAI embeddings
|
6. Choose the first external index target after the worker output is validated.
|
||||||
5. Validate end-to-end helpdesk search using real historical message data.
|
|
||||||
|
|
||||||
## Practical Commands
|
## Practical Commands
|
||||||
|
|
||||||
@@ -452,4 +467,6 @@ is the authoritative customer communication layer, plus the first safe event and
|
|||||||
export tooling around it.
|
export tooling around it.
|
||||||
|
|
||||||
The repo is now at the point where the next meaningful leap is an external
|
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:
|
The final output should include:
|
||||||
|
|
||||||
```text
|
```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 default issue update did not send Helpdesk email
|
||||||
[OK] redMCP non-Helpdesk CRUD control passed
|
[OK] redMCP non-Helpdesk CRUD control passed
|
||||||
[OK] Mailpit received outbound Helpdesk/Redmine mail containing the reply token
|
[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
|
[OK] Closed smoke-test Helpdesk issue
|
||||||
Smoke test passed.
|
Smoke test passed.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -25,11 +25,36 @@ environment. Before risky edits, archive the current plugin directories in
|
|||||||
LAN Redmine copy.
|
LAN Redmine copy.
|
||||||
- Short alias/usage routes were added to avoid noisy routing errors during
|
- Short alias/usage routes were added to avoid noisy routing errors during
|
||||||
manual browser testing.
|
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:
|
- Next meaningful milestone:
|
||||||
- Build the external worker/indexer that consumes `event_outbox_events`,
|
- Validate `redmine_outbox_worker.py` end to end against controlled Helpdesk
|
||||||
enriches via read-only MySQL joins, and emits deterministic ticket/message
|
activity, document the derived JSONL shape, then choose the external index
|
||||||
documents for external indexing.
|
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
|
## 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
|
This imports a controlled Helpdesk email, verifies `issueWithHelpdesk()`, checks
|
||||||
non-Helpdesk CRUD, verifies outbound Mailpit delivery, and closes the created
|
non-Helpdesk CRUD, confirms default updates do not send Helpdesk email, verifies
|
||||||
test ticket. Details are in `docs/helpdesk_smoke_test.md`.
|
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
|
## 8. Re-Run The Read-Only Validator
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user