solid2-agent-kit 0.23.0 → 0.23.1

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.
@@ -849,12 +849,13 @@ const CHECKS = [
849
849
  },
850
850
  ];
851
851
 
852
- // Named imports from "@solidjs/router" among `names`, located at the name inside
853
- // the import list. Only the imported name counts: `action as save` is flagged,
854
- // `formAction as action` (the local name) is not.
852
+ // Named imports (and re-exports) from "@solidjs/router" or its `/data` subpath
853
+ // among `names`, located at the name inside the import list. Only the imported
854
+ // name counts: `action as save` is flagged, `formAction as action` (the local
855
+ // name) is not.
855
856
  function routerImportFindings(content, names) {
856
857
  const findings = [];
857
- for (const statement of content.matchAll(/import\s+(?:type\s+)?\{([^}]*)\}\s*from\s*['"]@solidjs\/router['"]/g)) {
858
+ for (const statement of content.matchAll(/(?:import|export)\s*(?:type\s+)?\{([^}]*)\}\s*from\s*['"]@solidjs\/router(?:\/data)?['"]/g)) {
858
859
  const list = statement[1];
859
860
  const offset = statement.index + statement[0].indexOf(list);
860
861
  for (const name of names) {
@@ -316,7 +316,8 @@ Claude Code) for full patterns, decision tables, and official documentation URLs
316
316
  <!-- upstream:uncommitted-input-overwritten -->. Bind a draft signal written from
317
317
  `onInput` (`createSignal(() => props.name)` resets it when the prop changes), use
318
318
  `defaultValue` for an uncontrolled field, or write the next value back explicitly;
319
- `equals: false` on the signal does not help (the binding, not the signal, re-runs).
319
+ `equals: false` on the bound signal is no way to reject input — a source firing with an
320
+ equal value is one of the causes the warning names, so it only adds re-writes.
320
321
  22. Miscellaneous defaults: SSR-stable element ids come from `createUniqueId()` (never
321
322
  `Math.random()` or hardcoded duplicates); pass store data to `structuredClone` /
322
323
  `postMessage` / logs via `snapshot(store)` (proxies fail or leak reactivity) — a
@@ -162,8 +162,9 @@ seed the shape through the `createStore` argument or a derivation.
162
162
  **The store itself is read-only; only the draft writes.** An assignment or mutating
163
163
  call on the store proxy outside a setter is *ignored* — no throw, the value does not
164
164
  change, and TypeScript accepts it (`Store<T>` is `T`). Since 2.0.0-rc.17 dev warns
165
- `[STORE_WRITE_OUTSIDE_SETTER]` once per store object and key (the property and whether
166
- it was a set, define or delete); production stays silent
165
+ `[STORE_WRITE_OUTSIDE_SETTER]` once per store object and key (a later delete of a key
166
+ already reported is not reported again; the operation is only in the event's `data`);
167
+ production stays silent
167
168
  <!-- upstream:store-write-outside-setter -->. This is the
168
169
  MobX / Vue / Solid 1 `createMutable` reflex:
169
170
 
@@ -947,8 +948,9 @@ const [draft, setDraft] = createSignal(() => props.name);
947
948
  // 3. explicit write-back when the field must follow an external value exactly
948
949
  ```
949
950
 
950
- `equals: false` on the committed signal changes nothing — the binding re-runs, not the
951
- signal — and a `createEffect` that copies the prop into the field is rule 4 again.
951
+ `equals: false` on the committed signal makes it worse, not better — a source firing with
952
+ an equal value is one of the three causes the warning names, beside another binding in the
953
+ same template changing and a spread re-running — and a `createEffect` that copies the prop into the field is rule 4 again.
952
954
 
953
955
  ### Context
954
956
 
@@ -1233,7 +1235,7 @@ committed value over uncommitted user input <!-- upstream:uncommitted-input-over
1233
1235
  `[ASYNC_OUTSIDE_LOADING_BOUNDARY]` when a tracked read has no boundary above it, and
1234
1236
  `[LOADING_ON_OUTSIDE_HOLD]` when a `<Loading on>` boundary's data is also read outside it.
1235
1237
  Each entry carries a stable `[CODE]`, what the runtime observed, an owner chain
1236
- (`in <App> › <Cart> › <LineItem>`), and — since rc.17, under `vite dev` — an
1238
+ (`in <App> › <Cart> › <LineItem>`), and — since rc.16, under `vite dev` — an
1237
1239
  `at src/Cart.tsx:12:5` line naming where the scope was created (the compiler's
1238
1240
  `sourceNames.locations`; the same `loc` sits on every artifact event)
1239
1241
  <!-- upstream:source-names-locations -->; never silence a code before understanding it.
@@ -1291,7 +1293,7 @@ anonymous nodes print as `computed` / `effect` / `signal`; component labels
1291
1293
  (`<Checkout>`) are always present under `vite dev` and survive minification only with
1292
1294
  the compiler's `sourceNames` option (components, binding effects, primitives — the Vite
1293
1295
  plugin turns it on under `vite dev` and `observe: true`; `componentNames` was its rc.9 name
1294
- and is rejected now) <!-- upstream:source-names-option -->. Its `locations` kind (rc.17)
1296
+ and is rejected now) <!-- upstream:source-names-option -->. Its `locations` kind (rc.16)
1295
1297
  adds `file:line:col` to every name — `createComponent(Home, props, "Home", "src/App.tsx:12:5")`,
1296
1298
  `{ name, loc }` on primitives — which is what the `at …` line in a diagnostic and
1297
1299
  `event.loc` in an artifact print; the plugin turns it on under `vite dev` only, and an
@@ -2179,7 +2181,7 @@ how to reuse. Prefer the form on the right.
2179
2181
  | `onClick={setCount}` | `onClick={() => setCount((c) => c + 1)}` |
2180
2182
  | `onclick={fn}` / `onmouseover={fn}` (lowercase handlers) | `onClick={fn}` — a lowercase `on*` name is a plain attribute (dev warns `[LOWERCASE_EVENT_ATTRIBUTE]`), not an event <!-- upstream:lowercase-event-attribute --> |
2181
2183
  | `on:click={fn}` / `use:tooltip` / `attr:title` / `classList={{ on: x() }}` on a native element | `onClick`, a ref callback from a directive factory, `title`, `class={["btn", { on: x() }]}` — the 1.x forms are compile errors since rc.17 (`prop:` remains) <!-- upstream:removed-attribute-compile-error --> |
2182
- | `value={props.name} onChange={(e) => props.onCommit(e.currentTarget.value)}` (bound to the committed value, no per-edit write) | a draft signal `createSignal(() => props.name)` written from `onInput`, or `defaultValue={props.name}` — the binding re-applies the committed value over uncommitted typing (`[UNCOMMITTED_INPUT_OVERWRITTEN]`); `equals: false` does not help <!-- upstream:uncommitted-input-overwritten --> |
2184
+ | `value={props.name} onChange={(e) => props.onCommit(e.currentTarget.value)}` (bound to the committed value, no per-edit write) | a draft signal `createSignal(() => props.name)` written from `onInput`, or `defaultValue={props.name}` — the binding re-applies the committed value over uncommitted typing (`[UNCOMMITTED_INPUT_OVERWRITTEN]`); `equals: false` is one of its causes, not a fix <!-- upstream:uncommitted-input-overwritten --> |
2183
2185
  | `useDeferredValue(query())` / `startTransition(() => setQuery(q))` for an expensive derivation | `const rows = createDeferred(() => filter(all(), query()))` — an async memo that lags but never leads its inputs; `isPending(rows)` while it catches up. Unrelated to the 1.x `createDeferred(source, { timeoutMs })` <!-- upstream:create-deferred-export --> |
2184
2186
  | `event.target.value` | `event.currentTarget.value` |
2185
2187
  | `createContext(emptyStore)` for reactive state | `createContext<Todos>()` — dummy defaults silently no-op |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid2-agent-kit",
3
- "version": "0.23.0",
3
+ "version": "0.23.1",
4
4
  "description": "Teach AI coding agents (Cursor, Claude Code) to write correct Solid 2.0 instead of React or Solid 1.x — always-applied rules, an agent skill, and a mechanical pattern gate.",
5
5
  "type": "module",
6
6
  "license": "MIT",