replen 1.0.38 → 1.0.40

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.
@@ -280,7 +280,36 @@ typed properties, computed properties as rows", never the entity names).
280
280
  not determine executable to run". `npx replen@latest sync-projects` also
281
281
  sidesteps the shadow. Ensure each repo has a GitHub remote so it scopes by
282
282
  `owner/name`.
283
- 2. **Set domain tags** with `replen_set_tags` broad domain labels.
283
+ 2. **Set the domain tag cloud** with `replen_set_tags`. This is the single
284
+ biggest lever on match quality — do it DENSE and RANKED, not a handful of
285
+ broad labels:
286
+ - Emit AS MANY grounded tags as the code genuinely supports (aim 25–50+, no
287
+ hard cap), ordered MOST-CENTRAL FIRST. Density is what makes matching work.
288
+ - Describe the WORLD the project operates in, NOT how it's built: the
289
+ industry/sector (`estate-agents`, `letting-agents`, `property`, `proptech`),
290
+ the job-to-be-done (`lead-generation`, `lead-routing`), and the
291
+ entities/data it touches (`uk-postcodes`, `uk-addresses`, `landlords`,
292
+ `property-listings`).
293
+ - DISAMBIGUATE BY DENSITY. A lone ambiguous tag is dangerous — `uas` could
294
+ mean anything. Whenever a term is ambiguous, ALSO emit its synonyms,
295
+ abbreviations, expansions and broader/narrower neighbours (`uas`,
296
+ `unmanned-systems`, `unmanned-aerial-systems`, `uav`, `drone`, `drones`,
297
+ `military-drones`, `counter-uas`). The COLLECTIVE pins the meaning: a
298
+ candidate that hits one term but none of its neighbours is a different
299
+ world and scores low.
300
+ - QUALIFY AMBIGUOUS HEAD-NOUNS. If a tag's core noun is ambiguous ACROSS
301
+ fields (`agent`, `carry`, `model`, `pipeline`, `driver`, `mission`),
302
+ prefix it with the domain so the compound carries the meaning —
303
+ `estate-agent-matching` NOT `agent-matching`, `funding-carry` NOT `carry`.
304
+ A bare head-noun like `agent-matching` decomposes in embedding space toward
305
+ the wrong field (AI agents) and drags the whole project's centroid with it.
306
+ - GROUNDED ONLY — every tag supported by code you actually read; never
307
+ aspirational (don't add `scraping` if it doesn't scrape).
308
+ - EXCLUDE: stack / framework / language (`next.js`, `react`, `firebase`,
309
+ `typescript`, `fastapi`, `postgres` — captured by `replen_set_versions`,
310
+ not domain) and generic SaaS plumbing every app has (`authentication`,
311
+ `signup`, `user-roles`, `subscription-management`, `form-validation`,
312
+ `crud`, `admin-dashboard`). They match everything, so distinguish nothing.
284
313
  3. **Set capabilities + report + thesis** with `replen_set_capabilities`, passing
285
314
  the grounded `capabilities` array, the `report` from 2c, AND the `purpose` +
286
315
  `goals` from 2c-thesis. The server builds the facet vectors immediately, stores
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replen",
3
- "version": "1.0.38",
3
+ "version": "1.0.40",
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": {