Skip to content

Runbook: sequence modernization, hardening, documentation, and UX work #40

Description

@DenWin

Purpose

Provide the execution order for turning this fork into a distinct, testable, secure, and maintainable project. This is the coordination runbook for #9, #16, #24, and #31; the linked implementation issues remain the source of detailed acceptance criteria.

Operating rules

  1. Keep main releasable. One concern per pull request; use Closes #….
  2. Apply TDD to new behavior. For legacy behavior, add characterization tests before refactoring it.
  3. Every defect fix needs a regression test and, where practical, a representative real-world fixture.
  4. Record test command, result, fixture provenance, resource usage, and known limitations in the pull request.
  5. Do not add converters until capability modeling, process isolation, and the assessment matrix are trustworthy.
  6. Update documentation and ADRs in the same change that alters behavior or architecture.
  7. Stop promotion when security, data-loss, migration, or rollback evidence is missing.

Ordered execution

Phase 0 — stabilize ownership and triage

Exit gate: the known file-disclosure path is contained and tested; the project identity decision is recorded; main is green.

Phase 1 — create a trustworthy engineering baseline

Resolve in this order:

  1. Audit existing behavior and testability before retrospective testing #17 — complete the code, behavior, dependency, and testability audit.
  2. Create a characterization harness and testable application bootstrap #18 — introduce the testable bootstrap and characterization harness.
  3. Establish TDD, retrospective characterization, and real-world assessment #16 — establish the TDD, retrospective-test, real-world-fixture, and assessment policy.
  4. Harden GitHub Actions and CI/CD permissions #32 — establish least-privilege CI with required, reproducible checks.
  5. Unify linting, type checking, formatting, and policy validation #38 — unify formatting, linting, type checking, schema validation, and policy checks.
  6. Make application builds deterministic and independently verifiable #36 — make builds deterministic and independently verifiable.

Start #25 alongside this phase. Start #26 and #30 after the audit establishes evidence.

Exit gate: a clean checkout can run the documented checks; protected changes cannot bypass them; legacy seams have characterization coverage sufficient for the next phase.

Phase 2 — characterize and harden core behavior

Resolve characterization before broad refactoring:

  1. Characterize authentication, authorization, and account lifecycle #19 — authentication and account lifecycle.
  2. Characterize file storage, job lifecycle, and destructive operations #20 — storage, job lifecycle, cleanup, and destructive operations.
  3. Characterize converter catalog, selection, orchestration, and concurrency #21 — converter catalog, selection, orchestration, and concurrency.
  4. Strengthen converter adapter contracts and real-world fixture coverage #22 — adapter contracts and real-world fixture matrix.
  5. Add browser-level characterization for existing user workflows #23 — browser-level characterization of existing workflows.

Then implement #33 and #34 in small, tested slices. During this phase copy and consolidate these upstream defects:

Each copied issue should link its upstream source, state whether it was reproduced on this fork, and define a local regression test rather than assuming the upstream diagnosis is current.

Exit gate: bounded uploads and subprocesses, deterministic job transitions, reliable cleanup, modeled multi-output results, and tested recovery paths.

Phase 3 — harden container, build, and delivery

Resolve in dependency order:

  1. Evaluate and pin the production Debian base image #2 — select and pin the production base using measured compatibility and security data.
  2. Make downloaded Docker build dependencies reproducible #3 — pin and verify downloaded build dependencies.
  3. Run the ConvertX container as a non-root user #4 — move runtime execution to a non-root user, including a documented volume migration.
  4. Audit and reduce Docker runtime dependencies #5 — measure and reduce runtime dependencies and image size.
  5. Improve container health checks and subprocess lifecycle handling #7 — add meaningful health checks and bounded subprocess lifecycle handling.
  6. Add BuildKit caching and multi-platform Docker validation #6 — add BuildKit caching and multi-platform validation after the build is deterministic.
  7. Harden Docker image and release supply chain #35 — complete provenance, SBOM, vulnerability scanning, signing/attestation, and release controls.
  8. Harden repository governance and security configuration #37 — complete repository governance and security configuration.

Use #28 for deployment, backup, recovery, upgrade, and rollback procedures as the behavior stabilizes.

Exit gate: reproducible signed artifacts, non-root runtime, tested volume upgrade, useful health reporting, vulnerability policy, and a rehearsed rollback.

Phase 4 — redesign the user workflow

Implement #9 only after the underlying contracts are stable:

  1. Support explicit local, OIDC, and built-in authentication modes #11 — durable, revocable sessions across container restarts.
  2. Modernize the login screen #10 — modern accessible login UI.
  3. Redesign the multi-file upload queue and file actions #12 — bounded multi-file upload queue and accessible icon actions.
  4. Add capability-aware target and converter selection #13 — capability-aware conversion choices.
  5. Add shared batch defaults and per-file conversion settings #14 — validated batch defaults and per-file settings.
  6. Add safe output filename templates with live preview #15 — safe filename-template parser and preview.

Complete #29 with the stable HTTP and user workflows. Add load, browser, accessibility, and real-world conversion evidence for the release candidate.

Exit gate: the full workflow is covered at unit, integration, browser, and representative real-world levels; limits and failure modes are visible to users.

Phase 5 — selectively import upstream compatibility work

Reproduce before copying. Prefer adding the case to #22's assessment corpus first:

Upstream issues not to copy separately now

These are already represented locally; add upstream references or test cases to the existing issue instead:

Defer converter requests and major identity-provider/authorization features until Phases 1–4 establish measurable safety and product scope.

Per-issue execution checklist

  • Confirm dependencies and current reproduction.
  • Define observable acceptance criteria and threat/failure cases.
  • Add the failing test or characterization first.
  • Implement the smallest safe change.
  • Run unit, integration, browser, and applicable real-world tests.
  • Record time, memory, disk, output correctness, and failure/recovery evidence where relevant.
  • Update architecture, user, operator, and ADR documentation as applicable.
  • Verify upgrade and rollback behavior.
  • Link upstream issue/PR without implying upstream endorsement.

Review cadence

  • Re-triage this runbook after each phase exit or newly disclosed security issue.
  • Close copied upstream issues based on local acceptance criteria, not merely because upstream closes them.
  • Review deferred upstream defects monthly against the real-world assessment matrix.
  • Keep only the next phase actively in progress; later phases remain ordered backlog.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions