replen 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -175,6 +175,15 @@ code only to VERIFY (the vault may be stale); don't re-derive what it already
175
175
  holds. Privacy is unchanged: only capabilities/descriptors/paths/tags leave
176
176
  the machine, exactly as with a code-read — never vault content or code.
177
177
 
178
+ **Use the note→note `[[wikilinks]]` BETWEEN concept/entity notes as capability-
179
+ BOUNDARY evidence** (today you only follow note→FILE links, for `paths`). A tight
180
+ same-as cluster of concepts → emit ONE capability tag (don't split a thing the
181
+ user models as one). A concept fanning out to distinct linked clusters → split
182
+ into the concrete techniques (this is the 2d "break broad capabilities" move,
183
+ now backed by the user's own structure). A typed/deliberate cross-link between
184
+ two distinct concepts → keep them as two RELATED tags. Then, if the vault gave
185
+ you this structure, assemble the optional `concepts` array described in 2d.
186
+
178
187
  ### 2a. Read the code (not just the README)
179
188
 
180
189
  Read enough source to actually understand the project: entry points, the core
@@ -268,6 +277,18 @@ strings. Each is `{tag, descriptor, modality}`:
268
277
  Break broad capabilities into the concrete techniques the code uses. Be
269
278
  specific — `cloudflare bypass`/`proxy rotation`, not just `web scraping`.
270
279
 
280
+ **If you grounded from a vault (2a-pre), also assemble a `concepts` array** so
281
+ Replen can traverse the user's OWN graph for cross-repo leaps. For each
282
+ concept/entity note — **NEVER a file/symbol/function/class/module note** — emit
283
+ `{title, grounds: [the capability tags this note grounded], links: [{to: <other
284
+ concept title>, rel}]}` where `rel` is one of `relates | refines | depends |
285
+ same-as | contrast`. Pass it to `replen_set_capabilities` in 2e (it's optional —
286
+ omit it entirely if there's no vault). Hard rules (already true for everything
287
+ else, restated because this is new structure leaving the machine): lift only
288
+ concept/capability-LEVEL notes; note BODIES and code never leave; a note→file
289
+ link stays as a capability `path`, never a concept link; respect the cover —
290
+ sanitize titles, no codenames.
291
+
271
292
  **Also capture architectural PRACTICES as capabilities.** Beyond what the code
272
293
  *does*, note the distinctive structural *moves* it makes — these are what let
273
294
  Replen suggest a pattern to your OTHER projects ("Aegis made its domain model
@@ -333,6 +354,10 @@ typed properties, computed properties as rows", never the entity names).
333
354
  Paths only, never code. You just read these files; recording WHERE each
334
355
  capability lives lets Replen point another of the user's projects straight
335
356
  at the implementation worth porting ("aegis solved this — see src/cv/…").
357
+ **If you grounded from a vault, also pass the `concepts` array from 2d** —
358
+ concept titles + their `[[wikilinks]]` only (never file/symbol notes, never
359
+ bodies). Replen turns these into graph nodes + your-own-graph leaps. Omit it
360
+ when there's no vault.
336
361
  4. **Report pinned versions** with `replen_set_versions` — the resolved DIRECT
337
362
  dependency versions from the lockfile (package-lock.json / poetry.lock /
338
363
  uv.lock / Cargo.lock), plus runtimes under canonical keys (`node` from
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replen",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Make your AI coding tools smarter. One command, no API keys, free. Replen watches what your projects actually do and surfaces a few things worth bringing in each month. Use one as is, port a piece of another, cherry pick an idea, or build it clean room. The match happens inside your AI tool's session. A few actionable matches a month, by design.",
5
5
  "type": "module",
6
6
  "bin": {