@pikku/skills 0.12.19 → 0.12.21
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.
- package/CHANGELOG.md +98 -0
- package/dist/skills.gen.js +1 -1
- package/package.json +1 -1
- package/skills/pikku-better-auth/SKILL.md +45 -24
- package/skills/pikku-build-app/SKILL.md +17 -9
- package/skills/pikku-build-platform/SKILL.md +1 -1
- package/skills/pikku-build-quick/SKILL.md +6 -3
- package/skills/pikku-concepts/SKILL.md +7 -7
- package/skills/pikku-concepts/references/concept-mapping.md +1 -1
- package/skills/pikku-fabric/SKILL.md +10 -6
- package/skills/pikku-feature/SKILL.md +105 -3
- package/skills/pikku-i18n/SKILL.md +2 -2
- package/skills/pikku-react/SKILL.md +39 -5
- package/skills/pikku-scenario/SKILL.md +14 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,103 @@
|
|
|
1
1
|
# @pikku/skills
|
|
2
2
|
|
|
3
|
+
## 0.12.21
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 77ae071: `pikku fabric report` sends a finding — something about pikku that cost an agent time — to fabric. It needs a login but no linked project: a finding is about the framework rather than about anyone's project, and the reports worth having most come from checkouts that have nothing to name.
|
|
8
|
+
|
|
9
|
+
The finding can be given as JSON on stdin (`--stdin`) instead of as flags. Half the fields are prose, and prose carries apostrophes, quotes, backticks and newlines — every one a shell metacharacter before it is a character in a sentence — so an error message pasted into `--error` used to break the command at its first newline. The same schema validates either path.
|
|
10
|
+
|
|
11
|
+
Nothing is written to the repo, so nothing goes stale on an abandoned branch, and the terminal prints exactly what left the machine. Reporting never fails a build.
|
|
12
|
+
|
|
13
|
+
A finding that cannot be sent is held in `~/.fabric/findings` rather than dropped: logged out, unlinked, or fabric unreachable are the states a finding is most likely to be describing, and a scaffold that never got far enough to log in is exactly the thing worth hearing about. The queue drains on the next report that succeeds, keeps the project each finding was filed against, and is bounded at 100. `pikku fabric findings list`, `flush` and `clear` inspect and control it.
|
|
14
|
+
|
|
15
|
+
The resolved `@pikku/*` versions are read off the installed tree rather than out of `package.json`, since a range says nothing about what actually ran. A skewed tree and a package resolving through a workspace or link are both flagged, because either is a reason to read the finding differently.
|
|
16
|
+
|
|
17
|
+
The `pikku-feature` skill now tells an agent when to file one: work around it first, investigate only when there is no workaround, report at the depth already reached, and never patch pikku itself from inside a project that is using it.
|
|
18
|
+
|
|
19
|
+
- 32d1280: Prefix the better-auth plugin factories with `pikku`: `pikkuActor`, `pikkuBan`,
|
|
20
|
+
`pikkuFabric`, `pikkuDelegatedAuth` and `pikkuCredentialOAuth`.
|
|
21
|
+
|
|
22
|
+
A `betterAuth({ plugins: [...] })` array mixes this package's plugins with
|
|
23
|
+
better-auth's own, and until now nothing at the call site told them apart —
|
|
24
|
+
`plugins: [actor(...), ban(), fabric(...), organization()]` reads as four
|
|
25
|
+
plugins from one place when only the last is better-auth's. The prefix says
|
|
26
|
+
which package a plugin came from where it is actually wired.
|
|
27
|
+
|
|
28
|
+
The old names are still exported as deprecated aliases bound to the same
|
|
29
|
+
functions, so no import has to change. Nothing about the plugins themselves
|
|
30
|
+
moved: the `id` each registers under — `pikku-ban`, `actor`, `fabric`,
|
|
31
|
+
`delegated-auth`, `credential-oauth` — is unchanged, so no deployed database or
|
|
32
|
+
session is affected.
|
|
33
|
+
|
|
34
|
+
The pieces that read a plugin's _export_ name rather than its id accept both:
|
|
35
|
+
`PLUGIN_REGISTRY` is keyed under the prefixed and the bare name, and the
|
|
36
|
+
`pikku validate` ban/actor checks and the `scaffold.userAdmin` ban check count
|
|
37
|
+
either spelling as wired. Their messages now point at the new names.
|
|
38
|
+
|
|
39
|
+
## 0.12.20
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- 7a15c9c: An actor credential is one persona's, not everyone's
|
|
44
|
+
|
|
45
|
+
`SCENARIO_ACTOR_SECRET` was a skeleton key. Anyone holding it could post any
|
|
46
|
+
`actor: true` address to `/auth/sign-in/actor` and get that persona's session —
|
|
47
|
+
including the `admin` persona, which provisioning grants real admin. The browser
|
|
48
|
+
switcher held it too, baked into the dev bundle as `VITE_SCENARIO_ACTOR_SECRET`,
|
|
49
|
+
so "the reviewer can sign in as each kind of user" and "the reviewer's bundle is
|
|
50
|
+
entitled to every persona" were the same fact.
|
|
51
|
+
|
|
52
|
+
It is now a root that credentials derive from, never one that is presented:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
deriveActorSecret(root, email) // HKDF-expanded HMAC-SHA256 over the address
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The endpoint re-derives the expected value for whichever address is signing in
|
|
59
|
+
and compares, so nothing is stored or looked up, a credential minted for one
|
|
60
|
+
persona is refused for every other, and rotating the root invalidates all of
|
|
61
|
+
them at once. The root itself is no longer a valid credential, and a root under
|
|
62
|
+
32 characters refuses the endpoint rather than deriving weak credentials from
|
|
63
|
+
it — the server log says why, the client is not told.
|
|
64
|
+
|
|
65
|
+
What that buys, in the places that used to need the whole key:
|
|
66
|
+
|
|
67
|
+
- **`pikku dev`** mints one credential per declared persona into
|
|
68
|
+
`VITE_DEV_ACTOR_SECRETS` and no longer writes `VITE_SCENARIO_ACTOR_SECRET` at
|
|
69
|
+
all. The root stays on the server.
|
|
70
|
+
- **`pikku persona secret <id>`** mints them for anything else, and a run given
|
|
71
|
+
`PIKKU_PERSONA_SECRETS=id=secret,…` can sign in as those personas and no
|
|
72
|
+
others — asking for one outside the list throws naming the persona instead of
|
|
73
|
+
falling back to the root.
|
|
74
|
+
|
|
75
|
+
`useDevActors()` and `<DevActorSwitcher />` take `secrets` (one per address)
|
|
76
|
+
where they took `secret`, and an actor with no credential is no longer offered
|
|
77
|
+
rather than rendering a row that 401s. `HttpPersonasConfig.secret` and the
|
|
78
|
+
Playwright provider's `secret` additionally accept a resolver, which is how a
|
|
79
|
+
partially-credentialled run is expressed.
|
|
80
|
+
|
|
81
|
+
- ee9da9e: pikku-react now covers linking from a Mantine element: `component={Link}` widens the router generic to `AnyRouter` and stops checking `to` and `params`, so the skill teaches a wrapped typed `Link` reached through `renderRoot` instead.
|
|
82
|
+
- 7d641f3: The three build skills now draw the line between the manual click-through (a smoke check, for layout) and verification: anything worth driving through the UI belongs in a scenario's browser step, not in a browser session steered by hand that nothing re-runs.
|
|
83
|
+
- ee9da9e: The hardcoded-copy check stops flagging a feature's own name
|
|
84
|
+
|
|
85
|
+
Two rules disagreed. `runScenarioFileChecks` requires every `pikkuFeature` to
|
|
86
|
+
live in a `*.scenario.ts`, and moving one there is what put it in front of the
|
|
87
|
+
hardcoded-copy check — which then flagged the feature's own `name` because the
|
|
88
|
+
app catalogue happens to hold the same word:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
name: 'Downloads', → ✗ "Downloads" → nav__downloads | downloads__title
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Complying with the first rule created violations of the second, and the advice
|
|
95
|
+
— read the string from the app catalogue — would tie the Console's language to
|
|
96
|
+
the product's. `name`, `description` and `template` declared directly on a
|
|
97
|
+
`pikkuFeature`, `pikkuScenario` or `pikkuScenarioStep` are Console meta and are
|
|
98
|
+
now skipped. A `name` nested deeper — `getByRole('button', { name: 'Speichern'
|
|
99
|
+
})` — is a selector built out of UI copy and is still caught.
|
|
100
|
+
|
|
3
101
|
## 0.12.19
|
|
4
102
|
|
|
5
103
|
### Patch Changes
|