Skip to content

Replace FtpTasks (deprecated WebRequest/SYSLIB0014) with FluentFTP #354

Open

Description

@ChrisonSimtian

Tier 1 — Replace. src/Fallout.Common/IO/FtpTasks.cs (~83 LOC) does recursive FTP upload via the deprecated WebRequest/WebRequestMethods.Ftp API (#pragma warning disable SYSLIB0014).

Replace with

FluentFTP — async-first, maintained, modern FTP client.

⚠️ Breaking change

FtpTasks is public API. New signatures (async, different upload entry points) break consumers → carries breaking-change, lands on experimental, batched to the yearly major per ADR-0004. Add a CHANGELOG.md entry under the next major with a migration note. Consider an [Obsolete] shim on the old surface if a transition path is wanted.

Acceptance

  • FTP upload backed by FluentFTP; SYSLIB0014 suppression removed
  • breaking-change label + CHANGELOG entry + migration note
  • Targets experimental

From dependency-consolidation audit, 2026-06-02.

Activity

  1. added
    enhancementNew feature or request
    breaking-changeChange is breaking — requires major version bump per CLAUDE.md semver policy.
    on Jun 2, 2026
  2. ChrisonSimtian commented on Jun 3, 2026

    @ChrisonSimtian
    CollaboratorAuthor

    Insights from a discarded prototype (old paths; map to onion structure after #359).

    • Package: FluentFTP 54.2.0 (central).
    • Async-first with sync wrappers (match HttpTasks).
    • New signatures take an explicit host + server-relative paths, not full ftp:// URIs (FluentFTP separates host from paths) — this is the breaking part.
    • Keep the FtpCredentials static. Remove the SYSLIB0014 suppression.
    • No [Obsolete] shim: the old API parsed the host out of an ftp:// URI; preserving it would drag the deprecated WebRequest path along. Clean break on experimental is simpler.
    • No FtpTasks-specific tests exist today.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    breaking-changeChange is breaking — requires major version bump per CLAUDE.md semver policy.enhancementNew feature or requesttarget/vCurrentTargets the current version

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions