rtb-forge 0.7.1

Release-provider abstractions and backends (GitHub, GitLab, Bitbucket, Gitea, Codeberg, Direct) plus an async git-operations Repo built on gix. Part of the phpboyscout Rust toolkit.
Documentation
Feature: rtb-forge — Repo lifecycle (init / open / status)
  Foundation slice (v0.5 commit 1). Downstream tools need to
  initialise a fresh repository (the scaffolder's `rtb new` flow
  per project memory), open an existing one (every other op), and
  query its working-tree status (drift detection). These three ops
  are the constructors + readiness probe for the rest of the `Repo`
  surface.

  Scenario: R1 — initialise a fresh repository at an empty path
    Given an empty temporary directory
    When I init a repository at that directory
    Then a ".git" directory exists at that path
    And opening the same path again succeeds

  Scenario: R2 — open an existing repository
    Given an existing repository at a temporary directory
    When I open that directory
    Then the open call returns Ok

  Scenario: R3 — open returns OpenFailed for a non-repository path
    Given a temporary directory with no repository
    When I attempt to open that directory
    Then the call fails with RepoError::OpenFailed
    And the OpenFailed error names the offending path

  Scenario: R4 — status of a freshly-initialised repository is clean
    Given a freshly-initialised repository
    When I query its status
    Then staged, unstaged, and untracked are all empty

  Scenario: R5 — status reports an untracked file
    Given a freshly-initialised repository
    And I create an untracked file "hello.txt"
    When I query its status
    Then untracked contains "hello.txt"
    And staged and unstaged are empty