@penpair/web 0.3.1 → 0.3.4
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/README.md +82 -43
- package/docs/backup.md +6 -1
- package/docs/conventions/README.md +2 -4
- package/docs/coverage.md +14 -0
- package/docs/design-workflow.md +4 -1
- package/docs/getting-started.md +40 -20
- package/docs/guide.md +15 -8
- package/docs/installation.md +67 -0
- package/docs/marwes-components.md +1 -1
- package/docs/releasing.md +7 -3
- package/docs/skill-installation.md +58 -2
- package/docs/skill-validation.md +22 -23
- package/docs/validation.md +68 -0
- package/package.json +2 -2
- package/docs/branch-review.md +0 -59
- package/docs/conventions/completion-2026-10-22.md +0 -73
- package/docs/conventions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/docs/fixtures/browser-capture-2026-10-22.json +0 -217
- package/docs/fixtures/feedback-reproductions.md +0 -12
- package/docs/fixtures/feedback-scratch.template.json +0 -9
- package/docs/improvements.md +0 -1217
- package/docs/plans/registry-polling-fix.md +0 -101
- package/docs/plans/skill-workflow-readiness.md +0 -178
- package/docs/plans/tradient-feedback-0.2.0.md +0 -209
- package/docs/plans/tradient-feedback-review.md +0 -83
- package/docs/pr-improvements.md +0 -57
- package/docs/tradient-followups.md +0 -77
- package/docs/trials/report-template.json +0 -76
- package/docs/trials.md +0 -41
- package/docs/upstream/marwes-1.11.0-evidence.json +0 -15
- package/docs/upstream/marwes-requests.md +0 -35
package/docs/pr-improvements.md
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# PR draft
|
|
2
|
-
|
|
3
|
-
Target: `main` ← `codex/penpair-improvements`
|
|
4
|
-
|
|
5
|
-
Title: **Add guarded design workflows and reviewed whole-family releases**
|
|
6
|
-
|
|
7
|
-
## Description
|
|
8
|
-
|
|
9
|
-
Penpot operations now pin the target file, stop ambiguous write retries, require
|
|
10
|
-
positive readback evidence and record recovery progress. Structured inspection,
|
|
11
|
-
token ownership/reconciliation, explicit design cases, approvals, snapshots and
|
|
12
|
-
implementation handoffs make design-to-code work reproducible and reviewable.
|
|
13
|
-
|
|
14
|
-
The branch also adds project MCP tools, reusable build recipes, focused agent
|
|
15
|
-
skills, private credential references, advisory audits and clearer documentation.
|
|
16
|
-
The neutral core and one-way package dependency rules remain enforced.
|
|
17
|
-
|
|
18
|
-
Releases now use Changesets to collect notes into one **Release Penpair** PR. All
|
|
19
|
-
six packages receive the same bump, including unchanged packages. Merging that
|
|
20
|
-
reviewed version PR can trigger the existing guarded whole-family publisher using
|
|
21
|
-
npm OIDC. Feature merges only collect notes. The owner-approved temporary
|
|
22
|
-
`PENPAIR_RELEASE_EXCLUDE_PENPAIR=true` repository variable can omit only the
|
|
23
|
-
blocked short-name wrapper from publishing, with explicit logs/summary and all
|
|
24
|
-
other packages still required. All six repository versions continue together. A separate GitHub PR token is needed
|
|
25
|
-
for automatic version-PR checks. Both automation paths remain disabled until
|
|
26
|
-
owner activation; no package version is changed by this PR. The pending note
|
|
27
|
-
proposes 0.2.0 in the separate generated version PR.
|
|
28
|
-
|
|
29
|
-
## Validation
|
|
30
|
-
|
|
31
|
-
- `pnpm check`: build, typecheck, 583 tests and lockstep/config checks.
|
|
32
|
-
- `pnpm smoke:package`: all six tarballs install and run in clean consumers.
|
|
33
|
-
- Real Changesets CLI tests verify unchanged-package bumps, highest-level
|
|
34
|
-
selection, changelogs, note consumption and exact workspace dependencies.
|
|
35
|
-
- A disposable full version-wrapper rehearsal moves every package, changelog and
|
|
36
|
-
the source constant to 0.2.0; this branch remains at 0.1.3.
|
|
37
|
-
- All three workflows pass actionlint 1.7.12 and parsed permission/gate checks.
|
|
38
|
-
- Gate tests cover ordinary pushes, exact merged version PRs, manual confirmation,
|
|
39
|
-
pending notes, malformed auth evidence and workflow permission separation.
|
|
40
|
-
- Detached-checkout regression runs the exact CI Changesets command against the
|
|
41
|
-
base SHA and verifies consumed-note version PRs through their dedicated path.
|
|
42
|
-
Version-PR creation also supports a main-only manual trigger.
|
|
43
|
-
|
|
44
|
-
## Open acceptance and activation
|
|
45
|
-
|
|
46
|
-
- Hosted export/import restore proof (G3), two-person live trials (I12), and
|
|
47
|
-
real component measurement/override proof (C1) remain unchecked by request.
|
|
48
|
-
Native component generation remains gated.
|
|
49
|
-
- Configure GitHub main/environment protection, the PR token and trusted
|
|
50
|
-
publishers for every npm package before enabling release automation. Verify
|
|
51
|
-
the previously refused short name and any unpublished package bootstrap.
|
|
52
|
-
- npm publication is sequential; partial failures require explicit recovery.
|
|
53
|
-
- No remote policy, live Penpot mutation, consumer edit, upstream message,
|
|
54
|
-
release, tag or deployment was performed.
|
|
55
|
-
|
|
56
|
-
Review details: [branch review](branch-review.md), [living checklist and
|
|
57
|
-
reports](improvements.md), [release activation](releasing.md#one-time-owner-activation).
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Tradient adoption proposal — owner review required
|
|
2
|
-
|
|
3
|
-
This is a scoped handoff, not an applied consumer change. Read-only inspection on 2026-10-21 found local `main` at `3aa7a1c` in `/Users/niklaswestman/Documents/tradient/CODE/tradient`. The pre-existing untracked `penpot-poc/` folder remains untouched. No consumer files, commits, configuration, Penpot data or deployment state were changed.
|
|
4
|
-
|
|
5
|
-
## Evidence and corrections
|
|
6
|
-
|
|
7
|
-
- Root dev dependencies pin `@penpair/web` and `@penpair/marwes-ui` to `0.1.3`; the primary UI uses `@marwes-ui/react` `^1.11.0`.
|
|
8
|
-
- Root package scripts contain no `design:*` entries. `.env.example` has no `PENPAIR_MCP_URL` entry; no personal key file was read.
|
|
9
|
-
- `penpair.config.json` names `Tradient`, the `packages/frontend-evolved` app, `tradientLight`/`tradientDark` from its `src/theme.ts`, and `design/marwes-tokens.snapshot.json`. It has neither a file pin nor baselines.
|
|
10
|
-
- The committed snapshot is schema 1 with the generated Core/Dark and Tradient Light/Dark sets. It declares no project extra set or ownership map.
|
|
11
|
-
- `packages/frontend-evolved/src/components/organisms/sidebar-nav.tsx` already exports `SidebarNav`. Reuse and assess that component before proposing another sidebar. A missing upstream-library primitive does not mean the consumer lacks one.
|
|
12
|
-
- The existing API workflow uses Node 20, pnpm 10.12.1 and a frozen lockfile install. Its legacy-frontend typecheck is a separate migration concern; this design-token proposal does not change that job's unrelated behavior.
|
|
13
|
-
|
|
14
|
-
The new commands in this improvement branch are unreleased. A `0.1.3` version string alone does not prove the installed tarball contains these changes. First use an owner-reviewed release or an isolated packed-branch trial; do not edit the consumer to depend on unreviewed branch behavior.
|
|
15
|
-
|
|
16
|
-
## Proposed small adoption change
|
|
17
|
-
|
|
18
|
-
- [ ] Owner authorizes a separate consumer branch and confirms the target checkout/worktree. Preserve `penpot-poc/` and every unrelated change.
|
|
19
|
-
- [ ] Add these entries to the existing root `scripts` object:
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
{
|
|
23
|
-
"design:doctor": "penpair doctor",
|
|
24
|
-
"design:tokens:check": "penpair marwes tokens check"
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
- [ ] After the existing frozen install in the PR validation workflow, add this offline step:
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
- name: Check design token snapshot
|
|
32
|
-
run: pnpm run design:tokens:check
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
No Penpot key, browser or design-server connection belongs in this CI check. The initial adoption must regenerate the snapshot with the reviewed tool version before enabling a gate that would fail on the old expectation.
|
|
36
|
-
|
|
37
|
-
- [ ] Add only this empty documentation entry to `.env.example`, with a comment that each person creates their own key and stores it locally:
|
|
38
|
-
|
|
39
|
-
```dotenv
|
|
40
|
-
# Personal MCP endpoint; keep its value in ignored local configuration.
|
|
41
|
-
PENPAIR_MCP_URL=
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
- [ ] After installing the reviewed file-guard build, run `penpair connect --pin-file` while the owner independently confirms the intended open file. Commit the public file ID in `penpair.config.json`; keep personal keys out of the proposal, chat, diff and logs. Check `doctor --json` and exercise a wrong-file refusal on scratch files.
|
|
45
|
-
- [ ] Reconcile the installed skill path and project-facts reference with the chosen agent client. Use the owned instruction integration rather than replacing unrelated `AGENTS.md` text. Keep file identity in the typed config; facts may point to it.
|
|
46
|
-
- [ ] Declare the project-owned page/radius tokens under `marwes.extras` after reviewing their formulas or C1 measurements. Do not silently promote the field-note constants to authoritative component measurements.
|
|
47
|
-
- [ ] Regenerate the schema-2 token snapshot, review ownership and value changes, then run `design:tokens:check`. Inspect `tokens push` before any separately authorized Penpot mutation. Differing designer values require an explicit adopt/overwrite decision; prune is not a cleanup shortcut.
|
|
48
|
-
|
|
49
|
-
## Baseline and implementation follow-up
|
|
50
|
-
|
|
51
|
-
- [ ] Owner approves the intended `Dashboard / Desktop` frame and confirms its exact page, route and identity. No approval was inferred from the original brief.
|
|
52
|
-
- [ ] Add a baseline block only after that decision. The shape below is a merge template; replace the route with the application's actual route key:
|
|
53
|
-
|
|
54
|
-
```json
|
|
55
|
-
{
|
|
56
|
-
"baselines": {
|
|
57
|
-
"page": "Dashboard",
|
|
58
|
-
"root": "design/baselines",
|
|
59
|
-
"frames": [
|
|
60
|
-
{ "frame": "Dashboard / Desktop", "id": "dashboard-desktop", "route": "OWNER_CONFIRMED_ROUTE" }
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
- [ ] Inspect `baselines`, explicitly authorize the first `--apply`, export/look twice, and commit only the reviewed reference generation. Add rich case metadata and required coverage once state/theme/fixture setup is specified. Rich cases remain pending implementation-provider mappings until those hooks exist.
|
|
67
|
-
- [ ] Establish one working implementation comparison through the existing baseline route before expanding the consumer handoff. Capture stable fonts/data and show desktop/mobile plus one non-happy state. Browser interaction and accessibility checks remain separate.
|
|
68
|
-
- [ ] Review the primary/border-brand/link/focus theme family with C4 lint and actual light/dark screenshots. Confirm supported theme-input fields before editing `src/theme.ts`; keep intentional blue accents when the owner chooses them. Regenerate/review the snapshot after any change.
|
|
69
|
-
- [ ] Compare the app's Marwes 1.11.0 appearance against an isolated 1.4.1 reference when an owner-approved old fixture is available. Do not downgrade or alter the current consumer just to obtain that comparison.
|
|
70
|
-
- [ ] Implement new UI only in `packages/frontend-evolved`, reusing its existing SidebarNav and library primitives. Follow its structure/styling/data patterns and preserve its product semantics. D1 supplies explicit behavior/component metadata; a visual frame alone cannot make this implementation mechanical.
|
|
71
|
-
- [ ] Migrate useful build bodies into reviewed files or registered operations. Split pure helpers, inspection, idempotent mutation and independent readback. Use `@kit` and explicit adapter recipes, stable owned identities and full source hashes; do not copy the throwaway runner's path or name-based deletion shortcuts.
|
|
72
|
-
|
|
73
|
-
## Validation for that future consumer branch
|
|
74
|
-
|
|
75
|
-
Run the new offline design check, the primary app's matching tests/typecheck/build, whitespace checks and a browser review for UI changes. Follow the consumer's own pre-push review instruction before a later authorized push or PR. No deployment, AWS write, publishing or external message is part of this handoff.
|
|
76
|
-
|
|
77
|
-
Owner decisions still needed: which reviewed Penpair build to adopt, the confirmed Penpot file, initial frame approval/route, project-extra constants, intentional theme accents and scope of Dashboard implementation. This proposal keeps those decisions reviewable without applying them.
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schemaVersion": 1,
|
|
3
|
-
"kind": "human-trial",
|
|
4
|
-
"status": "not-run",
|
|
5
|
-
"commit": null,
|
|
6
|
-
"artifacts": [],
|
|
7
|
-
"participants": [],
|
|
8
|
-
"environment": {
|
|
9
|
-
"os": null,
|
|
10
|
-
"node": null,
|
|
11
|
-
"packageManager": null,
|
|
12
|
-
"agentClient": null,
|
|
13
|
-
"skillPath": null,
|
|
14
|
-
"penpotDeployment": null,
|
|
15
|
-
"apiVersion": null
|
|
16
|
-
},
|
|
17
|
-
"target": {
|
|
18
|
-
"ownerAuthorized": false,
|
|
19
|
-
"fileIds": [],
|
|
20
|
-
"pageIds": []
|
|
21
|
-
},
|
|
22
|
-
"metrics": {
|
|
23
|
-
"timeToDoctorGreenMs": null,
|
|
24
|
-
"interventions": null,
|
|
25
|
-
"understandableFailures": null,
|
|
26
|
-
"eligibleTokens": null,
|
|
27
|
-
"boundTokens": null,
|
|
28
|
-
"inspectionComplete": null,
|
|
29
|
-
"verifiedOutcomes": null
|
|
30
|
-
},
|
|
31
|
-
"exercises": {
|
|
32
|
-
"onboarding": {
|
|
33
|
-
"status": "not-run",
|
|
34
|
-
"evidence": [],
|
|
35
|
-
"findings": null
|
|
36
|
-
},
|
|
37
|
-
"skillDiscovery": {
|
|
38
|
-
"status": "not-run",
|
|
39
|
-
"evidence": [],
|
|
40
|
-
"findings": null
|
|
41
|
-
},
|
|
42
|
-
"smallBuild": {
|
|
43
|
-
"status": "not-run",
|
|
44
|
-
"evidence": [],
|
|
45
|
-
"findings": null
|
|
46
|
-
},
|
|
47
|
-
"wrongFile": {
|
|
48
|
-
"status": "not-run",
|
|
49
|
-
"evidence": [],
|
|
50
|
-
"findings": null
|
|
51
|
-
},
|
|
52
|
-
"writerConflict": {
|
|
53
|
-
"status": "not-run",
|
|
54
|
-
"evidence": [],
|
|
55
|
-
"findings": null
|
|
56
|
-
},
|
|
57
|
-
"recovery": {
|
|
58
|
-
"status": "not-run",
|
|
59
|
-
"evidence": [],
|
|
60
|
-
"findings": null
|
|
61
|
-
},
|
|
62
|
-
"implementationRoute": {
|
|
63
|
-
"status": "not-run",
|
|
64
|
-
"evidence": [],
|
|
65
|
-
"findings": null
|
|
66
|
-
},
|
|
67
|
-
"cleanup": {
|
|
68
|
-
"status": "not-run",
|
|
69
|
-
"evidence": [],
|
|
70
|
-
"findings": null
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
"blockers": [],
|
|
74
|
-
"backlogChanges": [],
|
|
75
|
-
"ownerReviewed": false
|
|
76
|
-
}
|
package/docs/trials.md
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Human trial runbook (I12)
|
|
2
|
-
|
|
3
|
-
Status: prepared, **not run**. Niklas asked to finish branch code and leave live trials pending (2026-10-21). Offline fixtures exercise control flow, not people, real servers, visual parity or adoption. Keep I12 unchecked until two actual people complete the exercises and review one real design-to-code route.
|
|
4
|
-
|
|
5
|
-
## Preparation
|
|
6
|
-
|
|
7
|
-
Use two consenting people with separate fresh project folders, personal connections and independently owned credentials. The owner must explicitly authorize two disposable Penpot files and identify their public file/page IDs. Never infer authorization from a file name. Keep the editor visible. No telemetry runs in the background.
|
|
8
|
-
|
|
9
|
-
Record commit, tarball SHA-256 hashes, package versions, OS, Node/package manager, actual agent client, Penpot deployment and observed API version in [report-template.json](trials/report-template.json). This branch still reports 0.1.3: the version alone cannot distinguish it from the registry release. Use a reviewed release or pack the complete branch package set. When installing command/adapter tarballs, override `@penpair/core` to the matching local core tarball, as `scripts/smoke-package.mjs` does. Installing only the web tarball may silently resolve an older registry core.
|
|
10
|
-
|
|
11
|
-
Start the clock before setup. Each person enters their own secret through the documented hidden connection flow; never collect the key in a report, shell transcript or screenshot. Run onboarding and `doctor --json`, then configure the owner-confirmed file pin. Record interventions and exact understandable or confusing failures, with credentials redacted.
|
|
12
|
-
|
|
13
|
-
Preview `penpair skills install --dry-run` before installation. Test discovery separately in each actual agent client. Codex scans repository `.agents/skills` from the current folder to the repository root and supports symlinked skill folders; check the skill selector and invoke the skill explicitly before assessing automatic discovery. See [official skill documentation](https://learn.chatgpt.com/docs/build-skills). Record the actual installed path, client version and observed discovery; do not generalize one client's result to another.
|
|
14
|
-
|
|
15
|
-
## Exercises
|
|
16
|
-
|
|
17
|
-
1. Build a small card using the [reviewed Hello-card example](../examples/hello-card/README.md), or use `probe --deep --kit --write` on an authorized scratch file with active typed tokens and an available font. Inspect the private preview. Record eligible/bound token counts with the inspected population and whether traversal was complete. The probe removes its temporary root; any persistent example needs an explicit owner-reviewed cleanup.
|
|
18
|
-
2. Pin file A, open disposable file B, and run `examples/trials/wrong-file-read.js` through `run-file` without a page argument. Expect a file-guard refusal before the body. Basic `pages` inspection only warns by design, so it is not the hard-block exercise. Restore A afterward.
|
|
19
|
-
3. Use a dedicated empty page in A. Copy `examples/trials` into each scratch project. Person A runs the holder below with a fresh marker. Person B attempts the same operation from their own project/key with a different fresh marker while A is writing. Record refusal during the lease, server serialization, overlap, unsupported API or unknown, and timings. Same-checkout tests only prove a local lock; they do not prove cross-client atomic exclusion. A busy attempt can have an uncertain journal even before applying: inspect the recorded steps and retain the actual diagnostic.
|
|
20
|
-
4. Run the recovery example below with `failAfterWrite=true`. It deliberately throws after creating a small owned frame. Record the uncertain run ID and frame ID. Use **the same files and parameters** with explicit `--resume RUN_ID`; independent readback must reconcile the existing frame without a duplicate. Export twice, look at the image, and record the result. A fresh run is not recovery. A renamed/duplicated marker or changed source requires inspection rather than an automatic retry.
|
|
21
|
-
5. Exercise one real implementation route through existing baselines and the Reflection handoff. Obtain explicit frame approval; hold fonts and fixture data stable. Record actual browser comparison and adoption findings. Rich coverage cases require the D4 hooks and cannot be represented as successful default-state checks. Human adoption remains a gate before declaring the C1/D1/E1 expansion accepted.
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
penpair run-file examples/trials/hold-writer.js \
|
|
25
|
-
--inspect examples/trials/hold-inspect.js --readback examples/trials/hold-readback.js \
|
|
26
|
-
--param fileId=OWNER_CONFIRMED_FILE --param pageId=OWNER_CONFIRMED_EMPTY_PAGE \
|
|
27
|
-
--param marker=FRESH_PERSON_A_MARKER --param holdMs=30000 \
|
|
28
|
-
--apply --timeout-ms 45000
|
|
29
|
-
|
|
30
|
-
penpair run-file examples/trials/recovery-build.js \
|
|
31
|
-
--inspect examples/trials/recovery-inspect.js --readback examples/trials/recovery-readback.js \
|
|
32
|
-
--param fileId=OWNER_CONFIRMED_FILE --param pageId=OWNER_CONFIRMED_PAGE \
|
|
33
|
-
--param name=RecoveryTrial --param marker=FRESH_RECOVERY_MARKER \
|
|
34
|
-
--param failAfterWrite=true --apply
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The holder intentionally waits to create a contention window; it is not layout settling. It creates no design nodes but records a `penpair/trial-hold-MARKER` file metadata record with holding/complete state. A partial marker is evidence requiring inspection. A completed marker makes the same operation a verified no-op; use a fresh marker for each new contention exercise. The recovery example leaves an owned frame intentionally. Remove only explicitly confirmed owned IDs/markers with a reviewed operation, or let the owner discard the dedicated scratch files.
|
|
38
|
-
|
|
39
|
-
## Evidence and completion
|
|
40
|
-
|
|
41
|
-
Copy the template under ignored `.penpair/trials/`. Unobserved metrics remain null, not zero. Record time to doctor-green, human interventions, failure comprehension, binding coverage, independent verified outcomes, visual review, blockers and resulting backlog changes. Capture screenshots only after closing secret-entry panels. Commit only owner-reviewed redacted summaries, never keys, raw connection transcripts or private journals. There is no completed human report yet.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schemaVersion": 1,
|
|
3
|
-
"kind": "upstream-request-evidence",
|
|
4
|
-
"observedAt": "2026-10-21",
|
|
5
|
-
"method": "read-only installed package declarations and source maps",
|
|
6
|
-
"liveMeasurements": false,
|
|
7
|
-
"artifacts": [
|
|
8
|
-
{"package":"@marwes-ui/react","version":"1.11.0","artifact":"dist/index.js.map","sha256":"5e8dfda3f704a98c07dbb0dba288fd4df8fd0adb8fda07a2507bfa09b9e73791","sources":["../src/components/stat-tile/stat-tile.tsx","../src/components/card/card.tsx"]},
|
|
9
|
-
{"package":"@marwes-ui/core","version":"1.11.0","artifact":"dist/index.js.map","sha256":"29fd794b744da873b63222bc3827870e7031753d3137cc28415aa14acf3e581d","sources":["../src/components/atoms/stat-tile/stat-tile-recipe.ts","../src/components/atoms/stat-tile/stat-tile-a11y.ts","../src/components/atoms/card/card-recipe.ts","../src/theme/theme-vars.ts"]}
|
|
10
|
-
],
|
|
11
|
-
"facts": ["StatTile trendValue and trendDirection are optional", "StatTile omits arbitrary children", "StatCardProps aliases CardProps", "CardProps accepts children", "No Sidebar or SidebarNav in the inspected React export list"],
|
|
12
|
-
"candidateEdgeCases": ["Numeric zero trend is subject to a truthiness condition", "Only string trendValue is passed to the core accessible-label recipe"],
|
|
13
|
-
"notEstablished": ["Latest upstream feature state", "Rendered numerical component values", "Browser/accessibility behavior", "Native Penpot override preservation"],
|
|
14
|
-
"sent": false
|
|
15
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Marwes requests for owner review — 2026-10-21
|
|
2
|
-
|
|
3
|
-
Status: **draft, unsent**. This document does not authorize an email, issue, package change or consumer edit. Review against the maintainer's current version before sending. Evidence is the installed 1.11.0 React/core package source and Claude's dated original trial notes; no new live component measurements were taken.
|
|
4
|
-
|
|
5
|
-
## Correct the starting assumptions
|
|
6
|
-
|
|
7
|
-
- `StatTileProps.trendValue` and `trendDirection` are already optional in React 1.11.0. The source conditionally omits the trend region. Drop the request to add optional trend support. A missing trend in a Penpot helper is an adapter/composition issue until proven otherwise.
|
|
8
|
-
- `StatTile` omits arbitrary `children`, but `StatCardProps` already aliases `CardProps`, which accepts children. Ask whether composing a sparkline in StatCard is the intended route before requesting another slot/API.
|
|
9
|
-
- The installed React export list has no Sidebar/SidebarNav symbol. The consumer already implements its own `SidebarNav`; a new consumer sidebar is unnecessary. An upstream navigation primitive is an optional library discussion, not a blocker for that implementation.
|
|
10
|
-
- Card/StatTile radii and typography values in the original brief are historical observations in one project theme/viewport/state. They are not newly verified universal library constants. The C1 measurement pilot still needs a real fixture and native instance-override proof.
|
|
11
|
-
|
|
12
|
-
## Prioritized requests
|
|
13
|
-
|
|
14
|
-
| Priority | Draft request | Evidence and acceptance |
|
|
15
|
-
| --- | --- | --- |
|
|
16
|
-
| P1 | Expose stable component anatomy/measurement metadata and fixture selectors. | Core 1.11.0 recipes expose data-component/slot class names, but those are not a complete versioned measurement contract. Start with Button/Card/StatTile across explicit light/dark/state/viewport fixtures. Ask for documented stable selectors and supported measurements; preserve actual semantic token names instead of inverse-matching equal colors/radii. |
|
|
17
|
-
| P1 | Document or expose component-derived radius and typography roles. | The source theme variable inventory includes general radius/radiusButton and typography scales. Claude reported Card radius 8, StatTile radius 24 and StatTile value 28/600/-0.84 in its trial context. Ask for the relationship to theme inputs and supported semantic roles; let new measurements establish values before proposing named tokens or formulas. Acceptance includes theme changes and explicit fallback constants. |
|
|
18
|
-
| P2 | Clarify the supported StatTile/StatCard composition route for charts. | StatTile has a fixed typed body; StatCard accepts normal Card children. Ask for a documented chart composition recipe first. Add a new slot only if the existing composition cannot preserve intended layout, keyboard behavior and semantics. |
|
|
19
|
-
| P2 | Discuss an upstream sidebar/navigation primitive if several consumers need the same contract. | No export in the inspected 1.11.0 React declarations; the consumer's existing SidebarNav already supplies its local implementation. Acceptance should cover active state, keyboard/focus semantics, responsive collapse and theme roles. Collect a reusable requirement before proposing upstream code. |
|
|
20
|
-
| P3 | Check numeric-zero trend rendering and trend accessible-label input. | React source accepts ReactNode, renders trend with a truthiness check, and passes only string values to the core trend-label recipe. Ask for a focused test of `trendValue={0}` and numeric content. This is a source-based candidate edge case, not an observed browser/accessibility failure. |
|
|
21
|
-
|
|
22
|
-
## Review/send checklist
|
|
23
|
-
|
|
24
|
-
- [ ] Owner selects which requests are useful and approves exact wording.
|
|
25
|
-
- [ ] Maintainer/current-version check confirms the requested capability is still absent or undocumented.
|
|
26
|
-
- [ ] C1 fixture captures exact theme, viewport, state, fonts and source version for numerical claims.
|
|
27
|
-
- [ ] Attach only owner-reviewed, non-private evidence and a minimal reproduction.
|
|
28
|
-
- [ ] Owner decides whether to send; no message or issue has been created here.
|
|
29
|
-
- [ ] Record maintainer response and resulting backlog changes after an authorized exchange.
|
|
30
|
-
|
|
31
|
-
## Reproduction evidence
|
|
32
|
-
|
|
33
|
-
Read [the source inventory](marwes-1.11.0-evidence.json). It records package versions and source-map hashes, with source paths within those maps. It contains no consumer designs, credentials or private project source. Reproduce with the same package artifacts and inspect the named source entries; rendered behavior still needs a real fixture.
|
|
34
|
-
|
|
35
|
-
These corrections strengthen Claude's brief: the useful requests are about reproducible anatomy and explicit semantic contracts. Existing optional props and consumer components should be reused before asking for duplicate capabilities. Equal measured values alone cannot establish token semantics or make design-to-code behavior mechanical.
|