aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/specs/2026-10-20-sb-builder-phantom-deps-design.md
blob: 46bc41ca219b8386729c4759adfa84142829b37a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# sb-builder: phantom deps (phase 4b, part 1)

Date: 2026-10-20
Status: approved
Builds on: `2026-10-20-sb-builder-phase4-design.md`, `2026-10-20-sb-builder-ui-design.md`

## Goal

Manage the -current phantom deps (deps SBo packages still require but
Slackware -current ships) from sb-builder: the list, suggestions from the
tree, and the `DELREQUIRES` sweep that mkhint's `-F` does today. Found when
-current added zenity: 8 SBo packages require it, nothing in the GUI could
mark it.

## Facts

- When a package enters the official tree, SBo removes it. A `REQUIRES`
  name that matches no package of the repo is then left behind. On
  2026-10-20 the tree has 140 such names, zenity among them; the 17 on
  mkhint's list (`/root/.config/mkhint/phantom-deps`) are all among them.
- sbshadow ends with `mkhint -F` (skipped on `--no`). mkhint's `-F` merges
  the phantom deps found in each `.info` `REQUIRES` into the hint's
  `DELREQUIRES`, `.bak` first, a minimal hint when there is none; it never
  removes entries.
- openvino moved into the personal overlay; only neovim still needs mkhint's
  bundled-dep logic.

## Helper (`sbb-remote` 0.7.0)

- Config: `phantom_deps_file`, default `/etc/sb-builder/phantom-deps`: one
  name per line, `#` comments, mkhint's format. Missing file = empty list.
  `manifest_packages` default becomes `["neovim"]`.
- `phantom-list`: `{"deps": [...], "suggestions": [{"name", "needed_by":
  [...]}]}`. Suggestions: every `REQUIRES` name (without `%README%`) that
  matches no package of the repo and is not on the list, sorted, with the
  packages requiring it.
- `phantom-add <name>...`, `phantom-remove <name>...`: names must match
  `PKGNAME`, need not exist in the repo. Rewrites the file atomically,
  comments kept, one name per line, no duplicates. Returns the new list.
- Job kind `fix-current`: for every package whose `.info` `REQUIRES` names a
  listed dep, merge those deps into `DELREQUIRES` of `<hintdir>/<pkg>.hint`
  (union, first seen order; `.bak` only when it changes; a new hint has just
  that line and no `.bak`). Unmanaged hint paths fail that package. Log one
  line per changed hint, then `SBB-RESULT`. Add only, like mkhint.
- `fix-current-now`: the same sweep run inline, its log on stdout, for
  sbshadow.

## sbshadow (slackrepo_setup)

The end of a non-preview run calls `sbb-remote fix-current-now` in place of
`mkhint -F`; without sbb-remote it says so and skips, as it does for mkhint
today.

## GUI

Hints ribbon: **Phantom deps…** (between Delete hint and the end). A
non-modal dialog:

- the list, one name per row, with **Remove** for the selected rows;
- a name field with **Add**;
- **Suggestions**: tickable rows `name  needed by a, b, c`, **Add ticked**;
- **Apply**: starts `fix-current` (the list itself is saved by each Add or
  Remove at once); the usual diff dialog follows, with Revert per package.

## Deploy (asks first)

1. Helper 0.7.0.
2. `/etc/sb-builder/phantom-deps` from mkhint's file (17 entries).
3. sbshadow.

## Out

neovim bundled deps (phase 4b, part 2), removing mkhint and nvchecker from
the VM (part 3), removing `DELREQUIRES` entries when a dep leaves the list.