replen 1.0.22 → 1.0.24
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.
|
@@ -171,7 +171,7 @@ export function discoverProjects(roots) {
|
|
|
171
171
|
seenGithub.add(githubFullName);
|
|
172
172
|
// Slug + display name both anchor on the GitHub repo NAME, not the
|
|
173
173
|
// local folder name. Deriving from the folder meant a folder rename (or
|
|
174
|
-
// an org rename
|
|
174
|
+
// an org rename) minted a fresh slug and the server
|
|
175
175
|
// inserted a duplicate row. `~/code/drone` with remote
|
|
176
176
|
// `nsokin/palisade-website` now registers as slug `palisade-website`.
|
|
177
177
|
// The repo name is also the fallback display name, so a generic
|
|
@@ -79,6 +79,12 @@ and versions ONLY — never code. This is what turns Replen's deadline and
|
|
|
79
79
|
security lines from "worth checking your pins" into "affects `aegis`
|
|
80
80
|
(3.10.12)" — and silences alarms for versions this repo verifiably isn't on.
|
|
81
81
|
|
|
82
|
+
This step is NOT optional, and not only about deadlines: the reported
|
|
83
|
+
names are also the matcher's "already a dependency" exclusion list. A
|
|
84
|
+
repo that never reports versions WILL get its own dependencies suggested
|
|
85
|
+
back to it as candidates (fastapi pinned in requirements.txt, fastapi in
|
|
86
|
+
the shortlist) — a shipped failure this step prevents.
|
|
87
|
+
|
|
82
88
|
If `candidates.length === 0`, tell the user "No new candidates today for
|
|
83
89
|
`<owner/name>`. Calm-cadence working as designed — 1-3 actionable
|
|
84
90
|
matches a month is the goal." Stop.
|
|
@@ -177,20 +183,40 @@ that means here.
|
|
|
177
183
|
mismatch, security flag. Empty list is fine; don't manufacture.
|
|
178
184
|
```
|
|
179
185
|
|
|
186
|
+
#### 3d. Record the verdict NOW — don't wait for the user
|
|
187
|
+
|
|
188
|
+
As soon as a candidate's verdict is formed, call `replen_record_triage`
|
|
189
|
+
for it — **before** you present the batch, and **without asking**.
|
|
190
|
+
Recording is observation, not action: it captures what you concluded
|
|
191
|
+
(verdict, score, reason code, one-liner, cosine) so the learning loop and
|
|
192
|
+
re-surfacing suppression actually fire. It is non-destructive and doesn't
|
|
193
|
+
foreclose anything — the user's star / hide / handoff choices in Step 4
|
|
194
|
+
are a separate axis layered on top.
|
|
195
|
+
|
|
196
|
+
The failure mode this rule exists to kill: a session triages four
|
|
197
|
+
candidates, presents them, ends with "want me to record these?", the
|
|
198
|
+
user moves on — and Replen learned NOTHING. The same four will come back.
|
|
199
|
+
A triage that isn't recorded never happened.
|
|
200
|
+
|
|
201
|
+
Only the user-judgment actions (star / hide / handoff / queue work) wait
|
|
202
|
+
for the user. Verdicts never do.
|
|
203
|
+
|
|
180
204
|
No marketing voice. No hype. The user is a working engineer; talk to
|
|
181
205
|
them like a peer. Concrete > clever.
|
|
182
206
|
|
|
183
207
|
### Step 4 — Present + capture actions
|
|
184
208
|
|
|
185
|
-
After all
|
|
209
|
+
By this point every verdict is ALREADY recorded (3d). After all
|
|
210
|
+
writeups, summarise, and ask only about the actions that genuinely need
|
|
211
|
+
the user's call — skips need nothing further:
|
|
186
212
|
|
|
187
213
|
```
|
|
188
|
-
3 candidates triaged for tech-news-site:
|
|
214
|
+
3 candidates triaged for tech-news-site (all verdicts recorded):
|
|
189
215
|
✓ adopt: kribblo/node-ffmpeg-installer (high · quick) — ffmpeg-static swap
|
|
190
216
|
⏭ port: tj/n (medium · moderate) — version-manager pattern
|
|
191
217
|
✗ skip: vercel/turbo (medium · deep) — wrong runtime, already have Vite
|
|
192
218
|
|
|
193
|
-
|
|
219
|
+
Want the adopt wired up, or any of these starred / hidden / handed off?
|
|
194
220
|
```
|
|
195
221
|
|
|
196
222
|
Then, for each candidate, capture the user's choice. For each action,
|
|
@@ -327,7 +353,13 @@ verdict it calibrates the relevance floor for this project, and your
|
|
|
327
353
|
adopt/skip pattern continuously tunes the ranking via the taste vector).
|
|
328
354
|
A skip coded `modality-collision` teaches Replen that this repo fits a
|
|
329
355
|
*different* modality — so it stays available for the right project but stops
|
|
330
|
-
colliding with this one.
|
|
356
|
+
colliding with this one. A skip coded `covered` is the strongest signal you
|
|
357
|
+
can send: it tells Replen the capability is **already built in this repo**, so
|
|
358
|
+
it stops probing that facet entirely and won't surface a different tool for it
|
|
359
|
+
next session. Use `covered` ONLY when you've confirmed the implementation in
|
|
360
|
+
the code (e.g. the repo has its own `services/llm_client.py`), not just because
|
|
361
|
+
a similar dependency exists — that's what makes "we already do this" stick to
|
|
362
|
+
the capability instead of replaying every session against a new candidate.
|
|
331
363
|
|
|
332
364
|
**Candidate's README is unreachable (WebFetch 404)**. Note it in the
|
|
333
365
|
writeup (`Caveats: README unreachable; verdict based on description
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "replen",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
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": {
|