You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SHARED.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,10 +22,10 @@ the inventory underneath it is **generated**, and the number it produces is a
22
22
23
23
| Package | Install | Replaces |
24
24
|---|---|---|
25
-
|[`ai-forms`](https://github.com/maonakamoto/ai-forms)|`npm i github:maonakamoto/ai-forms#v0.1.0`| per-app "fill this form from prose" + conversational refinement. Headless — ships **no markup**, so each app keeps its own styling. |
26
-
|[`ai-kit`](https://github.com/maonakamoto/ai-kit)|`npm i github:maonakamoto/ai-kit#v0.4.0`|**the AI layer, in one install** — which model to call, whether the vendor still lists it, the three kinds of 429, fair-share of a free tier, and (re-exported) `ai-forms`. Renamed from `ai-ration` 2026-08-26: the name described one of five modules, and the package had one adopter while five repos that skipped it went down together to a retired model id. |
27
-
|[`threadkit`](https://github.com/maonakamoto/threadkit)|`npm i threadkit`| multi-participant message threads where *permission is participation*, not a role or an ownership column. Headless pure functions, so "who may read this" is unit-testable instead of buried in a `WHERE` clause. AI participants obey the same visibility rules. **ESM-only.**|
28
-
|[`limitkit`](https://github.com/maonakamoto/limitkit)|`npm i github:maonakamoto/limitkit#v0.1.0`| the fleet's **12 hand-rolled rate limiters** (this file's own "next extraction" row). Sliding/fixed windows over an injectable two-method `Store`; **bounded** memory default (the unbounded-Map leak is impossible by construction); standard `X-RateLimit-*` + `Retry-After` headers — what orangecat's ADR-0002 specified seven months before anything enforced it; `clientIp()`. Refusals count nothing, so a hammered key recovers. Ships no middleware and **no limit values** — how many attempts a route allows is app semantics, asserted locally. |
25
+
|[`ai-forms`](https://github.com/catomean/ai-forms)|`npm i github:catomean/ai-forms#v0.1.0`| per-app "fill this form from prose" + conversational refinement. Headless — ships **no markup**, so each app keeps its own styling. |
26
+
|[`ai-kit`](https://github.com/catomean/ai-kit)|`npm i github:catomean/ai-kit#v0.4.0`|**the AI layer, in one install** — which model to call, whether the vendor still lists it, the three kinds of 429, fair-share of a free tier, and (re-exported) `ai-forms`. Renamed from `ai-ration` 2026-08-26: the name described one of five modules, and the package had one adopter while five repos that skipped it went down together to a retired model id. |
27
+
|[`threadkit`](https://github.com/catomean/threadkit)|`npm i threadkit`| multi-participant message threads where *permission is participation*, not a role or an ownership column. Headless pure functions, so "who may read this" is unit-testable instead of buried in a `WHERE` clause. AI participants obey the same visibility rules. **ESM-only.**|
28
+
|[`limitkit`](https://github.com/catomean/limitkit)|`npm i github:catomean/limitkit#v0.1.0`| the fleet's **12 hand-rolled rate limiters** (this file's own "next extraction" row). Sliding/fixed windows over an injectable two-method `Store`; **bounded** memory default (the unbounded-Map leak is impossible by construction); standard `X-RateLimit-*` + `Retry-After` headers — what orangecat's ADR-0002 specified seven months before anything enforced it; `clientIp()`. Refusals count nothing, so a hammered key recovers. Ships no middleware and **no limit values** — how many attempts a route allows is app semantics, asserted locally. |
records: role-derived access is correct at one doctor / one tenant / one org and
79
79
silently wrong at two. `canRead(thread, user)` cannot express that bug, because
80
80
there is no role to check.
@@ -113,11 +113,11 @@ Ranked by (copies × how identical the logic is). Counts from
113
113
| Concern | Files | Why it is a good candidate |
114
114
|---|---|---|
115
115
|`auto-merge-sweep.sh`|~~22~~**6**|**EXTRACTED 2026-08-16/20.** Sixteen repos call the canonical as a reusable workflow, each verified to actually *run* it (a sweep that fails to start looks exactly like one with nothing to do). The six remaining are deliberate: dotfiles is the canonical home and runs it directly; ai-forms, datacat, petvity, solon had dirty working trees owned by other sessions when swept — convert when clear. The two repos that had ever *tested* their copies (evig, orangecat) had that coverage ported into the canonical suite **before** deletion: 17 cases, mutation-proven. |
116
-
| rate limiting |**14 → adopting**|**Extracted 2026-08-20 as [`limitkit`](https://github.com/maonakamoto/limitkit)** (see registry above). fleetcrown converted as the proving consumer; 13 files remain across 8 repos, orangecat first in line (its ADR-0002 becomes a 12-line `Store` adapter + three deletions). The ratchet holds the count until each adoption lands. |
116
+
| rate limiting |**14 → adopting**|**Extracted 2026-08-20 as [`limitkit`](https://github.com/catomean/limitkit)** (see registry above). fleetcrown converted as the proving consumer; 13 files remain across 8 repos, orangecat first in line (its ADR-0002 becomes a 12-line `Store` adapter + three deletions). The ratchet holds the count until each adoption lands. |
117
117
| AI provider client |**16**| evig 7, orangecat 5. `ai-kit` already owns the hard part (chain, 429, budget); these are the callers. **Priced 2026-08-26, re-priced 2026-08-27:** Groq retired the llama-3.x family and the damage was far wider than the first count. Seven repos were broken, not five — the audit could not see two of them — and inside a repo the id was written down **two to four times**. Kivvi took three PRs to remove one retired id: it lived in the provider registry, an app's inline fetch body, the fallback chain, and a client hook's `FALLBACK_MODEL`. Each pass only found the copies the tooling could see. That is the cost of duplication measured rather than argued. fleetcrown, which adopted the package, was unaffected throughout. |
118
118
| logger |**10**| sbb-lost-found alone has 4. |
119
119
| health route |**8**| Identical shape in 8 repos; a 20-line contract. |
120
-
|~~`@ai-native-cms/core`~~| — |**Withdrawn — measurement error.**`maonakamoto/revampit`*redirects* to `maonakamoto/evig` (renamed in the pivot); the "two repos" with byte-identical trees were two clones of ONE repo. Nothing to extract. Two directories are not two repos: check `git remote -v` before reporting cross-repo duplication. |
120
+
|~~`@ai-native-cms/core`~~| — |**Withdrawn — measurement error.**`catomean/revampit`*redirects* to `catomean/evig` (renamed in the pivot); the "two repos" with byte-identical trees were two clones of ONE repo. Nothing to extract. Two directories are not two repos: check `git remote -v` before reporting cross-repo duplication. |
0 commit comments