Commit 6329db8
committed
fix: derive every repo's spelling join from the body map (#287)
The bare and prefixed spellings of seven repos normalised to two different
keys, so a policy map filed under one was invisible to the other.
`_target_sets` registered BOTH spellings of every `PyAuto*` repo as a known
target while `repo_aliases` only joined them for the libraries. Reproduced on
main: `@autobrain` reached a live known target with no witness row, so the
refactor conductor advised "strengthen tests first" for the best-tested repo in
the organism, and intake filed `Target: autobrain` — a folder that does not
exist. Five organs, one project repo and the Hands were split this way.
THE DECISION, taken before the edit as the prompt required: organs key on the
PREFIXED form. That is not a new rule, it is #269's rule made executable — the
canonical key is the package the repo SHIPS where it ships one, the repo name
where it does not. Organs ship no package; Nerves is the one that does and keys
bare already. Everything downstream was filed prefixed for organs, including the
Mind's own target folders, so the alternative would have rekeyed five maps for
no gain.
THE CLASS, not the fourth instance. `repo_aliases` was hand-maintained while the
known-target set was derived from the body map, so the two drifted silently.
The join is now DERIVED (`_derived_aliases`), keyed off the body map's new
`package:` field, and a hand row that contradicts the derivation raises instead
of quietly winning. What remains hand-written is only what a body map cannot
know: short forms and pre-rename spellings.
Also here:
- A repo whose NAME carries a `.` or `/` is now deliberately NOT registered.
`normalise_repo` truncates at the first separator, so no mention could ever
reach it; the tempting alias-the-head fix is worse than the gap, because where
that head is the org's own name every org-qualified mention would resolve to
that one repo. Derived from the names, not a hand-kept exclusion list.
- `REPO_DISPLAY` derives from the body map too — it had the beginnings of the
same drift, with reachable keys carrying no row, so a header came out as
`Target: pyautohands`.
Five guards, each mutation-tested:
- no repo splits across two keys (removing the derived join names all seven)
- no alias points at a key nothing is filed under
- the body map's `package:` agrees with the witness map
- unreachable repos are excluded AND their truncated head resolves to nothing
- canonical keys survive a body map with no `package:` — the fallback that lets
this half stand alone against a Mind checkout pinned to main
Verified: 515 tests pass (510 before). `repos_sync --check` all 13 legs OK,
tenant firewall included — it rejected two drafts of this prose for naming
instance repos, which is why the comments read generically. An A/B of every
spelling in the alias table and target sets shows exactly six resolutions
changed, all of them the intended joins; libraries, short forms, renames,
workspaces and org-qualified paths are byte-identical.
Heart NOT EVALUATED — unreachable from a web-github session.
Depends on PyAutoMind e160d40b (the `package:` field). The fallback above means
this does not block on it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7cTnL8Ke5WoNsdGVhCKn1 parent 5d816a7 commit 6329db8
4 files changed
Lines changed: 374 additions & 28 deletions
File tree
- agents
- conductors/intake
- faculties/sizing
- config
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
108 | 121 | | |
109 | 122 | | |
110 | 123 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
81 | 97 | | |
82 | 98 | | |
83 | 99 | | |
84 | | - | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
85 | 167 | | |
86 | | - | |
87 | | - | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
88 | 236 | | |
89 | 237 | | |
90 | 238 | | |
91 | | - | |
| 239 | + | |
92 | 240 | | |
93 | 241 | | |
| 242 | + | |
94 | 243 | | |
95 | 244 | | |
96 | 245 | | |
97 | 246 | | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
103 | 253 | | |
104 | 254 | | |
105 | 255 | | |
| |||
108 | 258 | | |
109 | 259 | | |
110 | 260 | | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
111 | 266 | | |
112 | 267 | | |
113 | 268 | | |
114 | 269 | | |
115 | 270 | | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | 271 | | |
120 | 272 | | |
121 | 273 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
7 | 23 | | |
| 24 | + | |
| 25 | + | |
8 | 26 | | |
9 | 27 | | |
10 | 28 | | |
11 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
12 | 41 | | |
13 | 42 | | |
14 | 43 | | |
15 | 44 | | |
16 | 45 | | |
17 | 46 | | |
18 | 47 | | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | 48 | | |
24 | 49 | | |
25 | 50 | | |
| |||
29 | 54 | | |
30 | 55 | | |
31 | 56 | | |
32 | | - | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
33 | 62 | | |
34 | 63 | | |
35 | 64 | | |
| |||
0 commit comments