Skip to content

ROADMAP

Brian Lehnen edited this page Apr 8, 2026 · 1 revision

Roadmap: DotNetWorkQueue Wiki Full Sync to 0.9.30

Created: 2026-04-08 Source: PROJECT.md, Phase 1 Audit MANIFEST.md (72 discrepancies across 40+ pages) Goal: Every wiki page accurately reflects the 0.9.30 API with no stale references, broken code samples, or dead links.


Phase Overview

Phase Name Pages Depends On Risk Scope
1 Audit Low Complete
2 Core Usage Pages ~18 pages Phase 1 High ~30%
3 Transport Pages ~16 pages Phase 2 Medium ~30%
4 Observability, Scheduler, Dashboard ~12 pages Phase 2 High ~25%
5 New Pages + Final Polish ~6 pages Phases 3, 4 Low ~15%

Phase 1 — Audit (COMPLETE)

Status: Done Output: .shipyard/phases/01-audit/MANIFEST.md with 72 findings (12 Critical, 18 High, 28 Medium, 14 Low)

Success Criteria (met)

  • Every existing wiki page audited against source code
  • All discrepancies catalogued with severity, location, and required action
  • Security caveats identified (6 findings across 3 pages)
  • Phase assignments proposed for all findings

Phase 2 — Core Usage Pages

Risk: HIGH — Contains 7 of 12 Critical findings. These pages have compile-breaking code samples that will fail for any user who copies them. Also includes the Linq-to-Method rename which affects sidebar links and cross-references throughout the wiki.

Depends on: Phase 1 (audit findings)

Scope

This phase covers the producer/consumer pages, their configuration pages, the Home page, Usage page, and the sidebar restructure. These are the pages most users hit first and the ones that other pages cross-reference most heavily.

Pages Touched

Renames (create new, mark old as redirects):

  • ProducerLinq.md -> ProducerMethod.md
  • ConsumerLinq.md -> ConsumerMethod.md
  • ConsumerLinqAsync.md -> ConsumerMethodAsync.md

Updates with Critical/High findings:

  • Consumer.md — Critical: missing ConsumerQueueNotifications param; High: broken logging API
  • ConsumerAsync.md — Critical: missing ConsumerQueueNotifications param; High: broken logging API
  • ConsumerLinq.md (becomes ConsumerMethod.md) — Critical: missing ConsumerQueueNotifications param; High: broken logging API; remove dynamic LINQ content
  • ConsumerLinqAsync.md (becomes ConsumerMethodAsync.md) — High: broken logging API; remove dynamic LINQ content
  • WorkerConfiguration.md — Critical: AbortWorkerThreadsWhenStopping removed from source, entire section is dead code
  • TaskSchedulerConfiguration.md — Critical: WaitForTheadPoolToFinish typo prevents compilation
  • ConsumerAsyncWorkGroup.md — High: AddWorkGroup third parameter may not exist

Updates with Medium/Low findings:

  • Home.md — Fix broken numbered list, typo, add .NET 10.0/.NET 8.0 targets, update feature list
  • Usage.md — Add links to all queue variants, fix typo
  • Producer.md — No changes needed (confirmed correct)
  • ProducerLinq.md (becomes ProducerMethod.md) — Confirmed correct but needs terminology update
  • ProducerConfiguration.md — Expand from stub to full configuration section list
  • ConsumerConfiguration.md — Add missing MessageError configuration link
  • ConsumerAsyncConfiguration.md — Add missing MessageError and MessageHistory links
  • _Sidebar.md — Rename Linq entries to Method, fix typos, add placeholders for new pages coming in later phases

Success Criteria

  1. Consumer.md, ConsumerAsync.md, ConsumerMethod.md code samples compile against 0.9.30 (include ConsumerQueueNotifications parameter, use ILogger methods)
  2. No wiki page contains AbortWorkerThreadsWhenStopping as a current feature
  3. WaitForThreadPoolToFinish is spelled correctly in TaskSchedulerConfiguration.md
  4. _Sidebar.md shows "ProducerMethod", "ConsumerMethod", "ConsumerMethodAsync" instead of Linq variants
  5. Home.md states .NET 10.0 / .NET 8.0 as supported targets; no mention of net48 or netstandard2.0
  6. All internal wiki links in updated pages resolve correctly
  7. No remaining references to DotNetWorkQueue.Logging.LogLevel or notifications.Log.Log(LogLevel, Func<string>) pattern in any Phase 2 page

Verification

# Check no broken logging API pattern remains in Phase 2 pages
grep -l "DotNetWorkQueue.Logging.LogLevel\|Log.Log(" Consumer.md ConsumerAsync.md ConsumerMethod.md ConsumerMethodAsync.md
# Should return no results

# Check renamed pages exist
ls ProducerMethod.md ConsumerMethod.md ConsumerMethodAsync.md

# Check sidebar has new names
grep -c "ProducerMethod\|ConsumerMethod\|ConsumerMethodAsync" _Sidebar.md
# Should return 3

# Check no stale framework references
grep -l "net48\|netstandard2.0\|\.NET Framework 4.8\|\.NET Standard 2.0" Home.md Usage.md
# Should return no results

# Check AbortWorkerThreadsWhenStopping removed
grep -l "AbortWorkerThreadsWhenStopping" WorkerConfiguration.md
# Should return no results

Phase 3 — Transport Pages

Risk: MEDIUM — Contains 5 Critical findings (typos in property names that prevent compilation, broken code). However, the fixes are largely mechanical and repetitive (same logging API fix across 6 transport pages, same property name typo fix across 2 queue creation pages).

Depends on: Phase 2 (sidebar links, Method rename must be in place since transport pages link to consumer/producer pages)

Scope

All transport-specific pages: transport introductions, options pages, queue creation options pages, and transport-specific feature pages. These can be worked on per-transport in parallel.

Pages Touched

Transport overview:

  • Transports.md — Remove outdated Redis 3.0.x / Windows 2008R2 platform claims; update SQL Server minimum version; update SQLite driver version to 1.0.119

SQL Server (4 pages):

  • SqlServerTransport.md — High: broken logging API; Medium: typo "requries"
  • SqlServerOptions.md — Medium: stub page, document all SqlServerMessageQueueTransportOptions properties
  • SqlServerQueueCreationOptions.md — Critical: EnableHoldTransactionUntilMessageCommited typo; Medium: EnableHistory undocumented
  • UserDequeueColumns.md — Medium: add transport-specific parameter type note

Redis (3 pages):

  • RedisTransport.md — High: outdated platform list, broken logging API; Medium: incomplete feature list
  • RedisOptions.md — Critical: DelayedProcessingMonitorTime does not exist (wrong property path); Medium: ClearErrorMessagesBatchLimit undocumented
  • RedisPoisonMessages.md — Verify in phase (not individually audited)

PostgreSQL (3 pages):

  • PostGreTransport.md — High: broken logging API; Medium: typo; Low: cross-platform connection string note
  • PostGreOptions.md — High: stub page, document all transport options properties
  • PostGreQueueCreationOptions.md — Critical: EnableHoldTransactionUntilMessageCommited typo; Medium: EnableHistory undocumented

SQLite (4 pages):

  • SQLiteTransport.md — High: broken logging API; Medium: typo
  • SQLiteOptions.md — High: stub page, document all transport options properties
  • SQLiteQueueCreationOptions.md — Medium: EnableHistory and EnableHoldTransactionUntilMessageCommitted undocumented
  • SQLiteInMemoryDB.md — Low: optional clarification of Version=3

LiteDb (3 pages):

  • LiteDbTransport.md — Critical: unescaped \t in connection string; High: broken logging API; Medium: missing features in list
  • LiteDbOptions.md — High: stub page, document all properties including fixed/immutable ones
  • LiteDbQueueCreationOptions.md — Medium: EnableHistory undocumented, EnableStatusTable default unclear

Memory (1 page):

  • MemoryTransport.md — High: broken logging API; Medium: NuGet package clarification

Success Criteria

  1. No transport page contains the broken notifications.Log.Log(DotNetWorkQueue.Logging.LogLevel.Debug, () => ...) pattern
  2. SqlServerQueueCreationOptions.md and PostGreQueueCreationOptions.md use EnableHoldTransactionUntilMessageCommitted (double t)
  3. RedisOptions.md uses correct property path .DelayedProcessingConfiguration.MonitorTime
  4. LiteDbTransport.md connection string does not contain unescaped \t
  5. All five Options stub pages (SqlServerOptions.md, PostGreOptions.md, SQLiteOptions.md, LiteDbOptions.md, RedisOptions.md) document the full property surface for their transport
  6. Transports.md no longer references Redis 3.0.x, Windows 2008R2, or SQL Server 2008
  7. Every transport page that supports history has a cross-reference link to MessageHistory
  8. Every transport page that references consumers links to ConsumerMethod (not ConsumerLinq)

Verification

# Check no broken logging API in any transport page
grep -rl "DotNetWorkQueue.Logging.LogLevel\|Log.Log(" *Transport.md *Options.md
# Should return no results

# Check corrected property spellings
grep -l "Commited[^d]" SqlServerQueueCreationOptions.md PostGreQueueCreationOptions.md
# Should return no results

# Check LiteDb connection string is not broken
grep "\\\\t" LiteDbTransport.md | grep -v "\\\\temp"
# No unescaped \t should appear

# Check outdated references removed from Transports.md
grep -i "3\.0\.\|2008R2\|SQL Server 2008" Transports.md
# Should return no results

# Check no stale ConsumerLinq references in transport pages
grep -l "ConsumerLinq" *Transport.md
# Should return no results

Phase 4 — Observability, Scheduler, and Dashboard

Risk: HIGHTrace.md needs a full rewrite (currently a 4-line stub despite 17 activity/span names in source). Scheduler.md needs Schyntax-to-cron migration. Dashboard pages need security caveats. Several pages require source verification of API signatures.

Depends on: Phase 2 (consumer/producer pages must be updated first since scheduler and observability pages reference them)

Scope

Cross-cutting concern pages (logging, metrics, tracing, admin), the job scheduler family (4 pages), message interception, message history, maintenance mode, and dashboard security fixes. Also includes the new JobScheduler.md and Monitoring.md pages.

Pages Touched

Observability (4 pages):

  • Logging.md — Low: typo; Medium: verify ILogger scope claim
  • Metrics.md — Low: clarify SDM instrument types and meter name casing; Medium: note external Grafana screenshot dependency
  • Trace.mdCritical: full rewrite. Document ActivitySource name, setup pattern, trace context propagation, all 17 activity/span names, non-ASP.NET host example
  • Admin.md — High: verify CreateAdminFunctions existence, update to IAdminApi if needed; Medium: document QueueStatusAdmin enum

Scheduler (4 pages):

  • Scheduler.md — Replace Schyntax expressions with cron (Cronos library); fix variable naming; replace Thread.Sleep; fix dead "See the WIKI" references; fix typos. Update all LinqExpressionToRun references.
  • SchedulerTimeSettings.md — Medium: fix uninitialized list; Low: typo
  • SchedulerQueueCreation.md — High: verify AddUpdateJob signature, update to QueueConnection if needed
  • SchedulerRedundancy.md — No changes needed (confirmed correct)

Message handling (2 pages):

  • MessageInterception.md — High (Security): add TripleDES key warnings; High: complete IMessageInterceptor documentation; Low: fix 5 typos
  • MessageHistory.md — Medium: verify Memory transport support; Medium: verify IHistoryConfiguration properties

Dashboard security caveats (2 pages):

  • DashboardUi.md — High (Security): SHA256 password hash caveat; HTTPS requirement note
  • DashboardConfiguration.md — High (Security): hardcoded API key warning; secrets-in-appsettings warning

Other (1 page):

  • MaintenanceMode.md — No changes needed (confirmed correct)

New pages (2):

  • JobScheduler.md — Cron expressions (5-field and 6-field via Cronos), IJobSchedule API, Description property, IJobSchedule.Previous() returning DateTimeOffset?
  • Monitoring.md — Prometheus metrics endpoint setup, Grafana dashboard, observability wiring with OpenTelemetry

Success Criteria

  1. Trace.md documents all 17 activity/span names, the ActivitySource name (dotnetworkqueue.instrumentationlibrary), and includes a setup code sample
  2. Scheduler.md uses cron expressions (Cronos) instead of Schyntax; no remaining Schyntax references
  3. All 6 security caveats from MANIFEST.md are present as visible warning blocks in MessageInterception.md, DashboardUi.md, and DashboardConfiguration.md
  4. JobScheduler.md exists and covers cron syntax, IJobSchedule API, and Previous() returning DateTimeOffset?
  5. Monitoring.md exists and covers Prometheus metrics and Grafana dashboard setup
  6. No page in Phase 4 scope references Schyntax as the current scheduling format
  7. Admin.md code sample uses the correct current API (verified against source)
  8. _Sidebar.md updated with Job Scheduler and Monitoring entries

Verification

# Check Trace.md is no longer a stub
wc -l Trace.md
# Should be significantly more than 4 lines (expect 80+)

# Check no Schyntax references remain in scheduler pages
grep -ri "schyntax\|sec(0,5\|second(0,15" Scheduler.md SchedulerTimeSettings.md SchedulerQueueCreation.md
# Should return no results (or only historical/migration context)

# Check new pages exist
ls JobScheduler.md Monitoring.md

# Check security caveats exist
grep -c "warning\|caution\|SECURITY\|do not\|never.*hardcode\|production" MessageInterception.md DashboardUi.md DashboardConfiguration.md
# Each file should have at least 1 match

# Check sidebar has new entries
grep -c "JobScheduler\|Monitoring" _Sidebar.md
# Should return 2

Phase 5 — New Pages + Final Polish

Risk: LOW — Primarily additive work (new pages) and a consistency pass. No compile-breaking issues remain by this point.

Depends on: Phases 3 and 4 (all existing pages must be updated before the migration guide can accurately reference them, and before the consistency pass can verify cross-references)

Scope

Create the remaining new pages, perform a full consistency pass across all wiki pages, and finalize the sidebar.

Pages Touched

New pages (1):

  • MigrationGuide.md — Organized by version range, covering: .NET Framework drop (0.9.19), Schyntax-to-cron migration (0.9.30), dynamic LINQ removal, Thread.Abort removal (0.9.13), IJobSchedule.Previous() return type change. Before/after code examples for each breaking change.
  • DashboardDocker.md — Docker image, self-contained mode, /app/plugins directory, DashboardConnectionConfig POCO, IConfiguration overload

Consistency pass (all pages):

  • Verify all internal wiki links resolve (especially after renames)
  • Verify no remaining references to: net48, netstandard2.0, .NET Framework 4.8, .NET Standard 2.0, Schyntax (as current), dynamic LINQ (as current), AbortWorkerThreadsWhenStopping, broken Log.Log() pattern
  • Verify consistent heading levels across all pages
  • Verify all code samples have links to DotNetWorkQueue.Samples repo where full examples exist
  • Fix any remaining typos from MANIFEST.md Low findings not yet addressed

Sidebar finalization:

  • _Sidebar.md — Add Migration Guide as top-level entry; add Dashboard Docker under Dashboard section; verify all links resolve; fix remaining typos ("Additonal", "Posion")

Footer:

  • _Footer.md — Review and update if needed

Success Criteria

  1. MigrationGuide.md exists and covers all breaking changes from 0.9.13 through 0.9.30 with before/after code
  2. DashboardDocker.md exists and covers Docker deployment, self-contained mode, plugin assembly loading
  3. Zero wiki pages reference net48, netstandard2.0, or .NET Framework 4.8 as supported targets
  4. Zero wiki pages reference Schyntax or dynamic LINQ as current features (migration guide may reference them historically)
  5. All sidebar links resolve to existing pages
  6. All code samples on all pages include a link to the corresponding sample in DotNetWorkQueue.Samples where one exists
  7. No remaining typos from the MANIFEST.md audit

Verification

# Check new pages exist
ls MigrationGuide.md DashboardDocker.md

# Full stale reference scan across ALL wiki pages
grep -rl "net48\|netstandard2\.0\|\.NET Framework 4\.8\|\.NET Standard 2\.0" *.md
# Should return no results

grep -rl "AbortWorkerThreadsWhenStopping" *.md
# Should return no results

grep -rl "DotNetWorkQueue\.Logging\.LogLevel" *.md
# Should return no results

# Check sidebar links (extract wiki page names, verify files exist)
grep -oP 'wiki/\K[^)]+' _Sidebar.md | while read page; do
  [ ! -f "${page}.md" ] && echo "BROKEN: ${page}.md"
done
# Should output nothing

# Check all MANIFEST typos are fixed
grep -i "requries\|canelazation\|amoong\|explictly\|seriaization\|messsage\|initalization\|decyrpt\|seperate\|accssed\|Additonal\|Posion" *.md
# Should return no results

# Check migration guide covers key breaking changes
grep -c "cron\|Cronos\|Thread\.Abort\|net48\|Schyntax\|LINQ.*removed\|Previous()" MigrationGuide.md
# Should return multiple matches

Dependency Graph

Phase 1 (Audit) ─── COMPLETE
    │
    v
Phase 2 (Core Usage) ──────────────────────┐
    │                                       │
    ├──────────────┐                        │
    v              v                        │
Phase 3         Phase 4                     │
(Transports)    (Observability/Scheduler/   │
                 Dashboard)                 │
    │              │                        │
    └──────┬───────┘                        │
           v                                │
        Phase 5 (New Pages + Polish) <──────┘

Phases 3 and 4 can execute in parallel after Phase 2 completes. Phase 5 requires both 3 and 4 to be finished.


Risk Assessment

Risk Impact Mitigation
API signatures changed since audit Code samples may still be wrong after update Verify every code sample against DotNetWorkQueue source and Samples repo during implementation
Memory transport history support unconfirmed MessageHistory.md may make false claims Phase 4 builder must verify against source before documenting
CreateAdminFunctions may not exist Admin.md example needs different API Phase 4 builder must check source; fallback is IAdminApi from IoC
Dashboard screenshots not available DashboardUi.md and DashboardDocker.md cannot show UI Document text descriptions; reference GitHub issue #112 as placeholder
Samples repo may not cover all transports Some pages may lack sample links Link where samples exist; note gaps for future sample additions

Estimated Session Sizing

  • Phase 2: 2-3 plans (foundation + renames in plan 1, consumer fixes in plan 2, configuration pages in plan 3)
  • Phase 3: 2-3 plans (can split by transport family: SQL/PostgreSQL in plan 1, Redis/SQLite in plan 2, LiteDb/Memory in plan 3)
  • Phase 4: 2-3 plans (observability in plan 1, scheduler in plan 2, dashboard security + new pages in plan 3)
  • Phase 5: 1-2 plans (new pages in plan 1, consistency pass in plan 2)

Clone this wiki locally