feat(client): display fork identity for Phase C / P4 (no forks yet)

Merged
TO
2mo ago
+103-4

Summary

Tooling-only groundwork for the selective fork policy (P4). No forks created — this is display/parsing plumbing so that when a fork is eventually created (after satisfying ADR 0001's Lane 3 checklist in full: license, bounded scope, build/release capability, ownership, stewardship record, upstreaming-default, exit condition), the client already knows how to show it honestly.

  • SourceInfo gains optional upstream: Option<String> (original repo URL, set only for numan-maintained fork versions).
  • numan info: adds Distribution: numan-maintained fork -- see 'upstream' under each version below when a package's owner is numan-maintained, and an upstream: line under any version whose source.upstream is set.
  • numan search: appends a [fork] marker to rows owned by numan-maintained (extracted as a small pure fork_marker() helper, mirroring format_row_status()'s existing style for testability).

Test plan

  • cargo build — clean
  • cargo test — 665+ passed across lib and all integration binaries, 0 failed
  • cargo fmt --check — clean
  • New tests: format_info fork-distribution note (present/absent), format_info upstream line (present/absent), fork_marker() (numan-maintained / normal owner)

Ref: docs/plans/2026-08-09-intake-process-reform.md (P4), docs/adr/0001-ecosystem-trust-upstream-contribution-fork-stewardship.md, numan-registry/numan-plugins companion PRs.

šŸ¤– Generated with Claude Code