@pikku/skills 0.12.19 → 0.12.20

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 CHANGED
@@ -1,5 +1,67 @@
1
1
  # @pikku/skills
2
2
 
3
+ ## 0.12.20
4
+
5
+ ### Patch Changes
6
+
7
+ - 7a15c9c: An actor credential is one persona's, not everyone's
8
+
9
+ `SCENARIO_ACTOR_SECRET` was a skeleton key. Anyone holding it could post any
10
+ `actor: true` address to `/auth/sign-in/actor` and get that persona's session —
11
+ including the `admin` persona, which provisioning grants real admin. The browser
12
+ switcher held it too, baked into the dev bundle as `VITE_SCENARIO_ACTOR_SECRET`,
13
+ so "the reviewer can sign in as each kind of user" and "the reviewer's bundle is
14
+ entitled to every persona" were the same fact.
15
+
16
+ It is now a root that credentials derive from, never one that is presented:
17
+
18
+ ```ts
19
+ deriveActorSecret(root, email) // HKDF-expanded HMAC-SHA256 over the address
20
+ ```
21
+
22
+ The endpoint re-derives the expected value for whichever address is signing in
23
+ and compares, so nothing is stored or looked up, a credential minted for one
24
+ persona is refused for every other, and rotating the root invalidates all of
25
+ them at once. The root itself is no longer a valid credential, and a root under
26
+ 32 characters refuses the endpoint rather than deriving weak credentials from
27
+ it — the server log says why, the client is not told.
28
+
29
+ What that buys, in the places that used to need the whole key:
30
+
31
+ - **`pikku dev`** mints one credential per declared persona into
32
+ `VITE_DEV_ACTOR_SECRETS` and no longer writes `VITE_SCENARIO_ACTOR_SECRET` at
33
+ all. The root stays on the server.
34
+ - **`pikku persona secret <id>`** mints them for anything else, and a run given
35
+ `PIKKU_PERSONA_SECRETS=id=secret,…` can sign in as those personas and no
36
+ others — asking for one outside the list throws naming the persona instead of
37
+ falling back to the root.
38
+
39
+ `useDevActors()` and `<DevActorSwitcher />` take `secrets` (one per address)
40
+ where they took `secret`, and an actor with no credential is no longer offered
41
+ rather than rendering a row that 401s. `HttpPersonasConfig.secret` and the
42
+ Playwright provider's `secret` additionally accept a resolver, which is how a
43
+ partially-credentialled run is expressed.
44
+
45
+ - 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.
46
+ - 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.
47
+ - ee9da9e: The hardcoded-copy check stops flagging a feature's own name
48
+
49
+ Two rules disagreed. `runScenarioFileChecks` requires every `pikkuFeature` to
50
+ live in a `*.scenario.ts`, and moving one there is what put it in front of the
51
+ hardcoded-copy check — which then flagged the feature's own `name` because the
52
+ app catalogue happens to hold the same word:
53
+
54
+ ```
55
+ name: 'Downloads', → ✗ "Downloads" → nav__downloads | downloads__title
56
+ ```
57
+
58
+ Complying with the first rule created violations of the second, and the advice
59
+ — read the string from the app catalogue — would tie the Console's language to
60
+ the product's. `name`, `description` and `template` declared directly on a
61
+ `pikkuFeature`, `pikkuScenario` or `pikkuScenarioStep` are Console meta and are
62
+ now skipped. A `name` nested deeper — `getByRole('button', { name: 'Speichern'
63
+ })` — is a selector built out of UI copy and is still caught.
64
+
3
65
  ## 0.12.19
4
66
 
5
67
  ### Patch Changes