@penpair/web 0.3.7 → 0.4.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.
- package/docs/adapters.md +1 -1
- package/docs/approvals.md +33 -2
- package/docs/artifacts.md +23 -3
- package/docs/browser-sessions.md +147 -0
- package/docs/compatibility.md +4 -2
- package/docs/copy-between-pages.md +54 -0
- package/docs/coverage.md +20 -4
- package/docs/design-releases.md +164 -0
- package/docs/guide.md +20 -3
- package/docs/handoff.md +1 -1
- package/docs/integration-maps.md +171 -0
- package/docs/journey-maps.md +139 -0
- package/docs/layout-settling.md +17 -1
- package/docs/mcp.md +2 -0
- package/docs/run-file.md +2 -0
- package/docs/troubleshooting.md +1 -1
- package/examples/design-release-maps/README.md +72 -0
- package/examples/design-release-maps/integration.json +181 -0
- package/examples/design-release-maps/journey.json +187 -0
- package/examples/design-release-maps/sample-source.md +8 -0
- package/package.json +2 -2
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "journey-map",
|
|
4
|
+
"id": "reset-password-journey",
|
|
5
|
+
"title": "Reset password",
|
|
6
|
+
"goal": "Request password-reset instructions and understand the next step.",
|
|
7
|
+
"sources": [
|
|
8
|
+
{
|
|
9
|
+
"id": "sample-brief",
|
|
10
|
+
"kind": "other",
|
|
11
|
+
"path": "examples/design-release-maps/sample-source.md",
|
|
12
|
+
"sha256": "ab97f0a30f066e9a9f2689d1624608ea91287751cbc6a613542c0e97de187a96"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"nodes": [
|
|
16
|
+
{
|
|
17
|
+
"id": "address-entry",
|
|
18
|
+
"label": "Enter email",
|
|
19
|
+
"kind": "screen",
|
|
20
|
+
"origin": "observed",
|
|
21
|
+
"sourceIds": [
|
|
22
|
+
"sample-brief"
|
|
23
|
+
],
|
|
24
|
+
"requirementIds": [
|
|
25
|
+
"reset-entry"
|
|
26
|
+
],
|
|
27
|
+
"summary": "Provide an address for reset instructions.",
|
|
28
|
+
"description": "The synthetic brief includes an address-entry screen. No Penpot frame or application has been inspected. Field validation, submission behavior and the final wording still require project evidence or review.",
|
|
29
|
+
"icon": "screen"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "confirmation",
|
|
33
|
+
"label": "Check your email",
|
|
34
|
+
"kind": "screen",
|
|
35
|
+
"origin": "observed",
|
|
36
|
+
"sourceIds": [
|
|
37
|
+
"sample-brief"
|
|
38
|
+
],
|
|
39
|
+
"requirementIds": [
|
|
40
|
+
"reset-confirmation"
|
|
41
|
+
],
|
|
42
|
+
"summary": "Explain the next step after the request.",
|
|
43
|
+
"description": "The synthetic brief includes a confirmation screen. Its success transition and response messaging are proposed, not observed. Confirm the actual request and account-disclosure policy before implementing this state.",
|
|
44
|
+
"icon": "screen"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "recoverable-error",
|
|
48
|
+
"label": "Retry request",
|
|
49
|
+
"kind": "state",
|
|
50
|
+
"origin": "proposed",
|
|
51
|
+
"requirementIds": [
|
|
52
|
+
"reset-error-retry"
|
|
53
|
+
],
|
|
54
|
+
"summary": "Keep the address and offer a retry.",
|
|
55
|
+
"description": "Proposed recovery preserves the entered address after a failed request, explains the failure and allows another attempt. No inspected design or implementation establishes this behavior yet. Review it, then verify a real failure and retry.",
|
|
56
|
+
"icon": "action"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "expiry-policy",
|
|
60
|
+
"label": "Request policy",
|
|
61
|
+
"kind": "decision",
|
|
62
|
+
"origin": "unknown",
|
|
63
|
+
"requirementIds": [
|
|
64
|
+
"reset-expiry"
|
|
65
|
+
],
|
|
66
|
+
"summary": "Decide expiry and repeat-request behavior.",
|
|
67
|
+
"description": "The source provides no expiry, repeat-request or disclosure policy. Obtain the actual product and service contract before deciding what the interface should say or do. This is an unresolved requirement, not an inferred security rule.",
|
|
68
|
+
"icon": "decision"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "focus-recovery",
|
|
72
|
+
"label": "Accessible recovery",
|
|
73
|
+
"kind": "behavior",
|
|
74
|
+
"origin": "proposed",
|
|
75
|
+
"requirementIds": [
|
|
76
|
+
"reset-focus"
|
|
77
|
+
],
|
|
78
|
+
"summary": "Announce errors and guide keyboard focus.",
|
|
79
|
+
"description": "Proposed accessible recovery should explain failures to screen-reader users and support keyboard correction and retry. Exact focus destinations, announcement behavior and implementation checks remain to be defined and tested.",
|
|
80
|
+
"icon": "check"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"edges": [
|
|
84
|
+
{
|
|
85
|
+
"id": "request-success",
|
|
86
|
+
"from": "address-entry",
|
|
87
|
+
"to": "confirmation",
|
|
88
|
+
"label": "Success",
|
|
89
|
+
"origin": "proposed",
|
|
90
|
+
"requirementIds": [
|
|
91
|
+
"reset-confirmation"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "request-failure",
|
|
96
|
+
"from": "address-entry",
|
|
97
|
+
"to": "recoverable-error",
|
|
98
|
+
"label": "Failure",
|
|
99
|
+
"origin": "proposed",
|
|
100
|
+
"requirementIds": [
|
|
101
|
+
"reset-error-retry"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "retry",
|
|
106
|
+
"from": "recoverable-error",
|
|
107
|
+
"to": "address-entry",
|
|
108
|
+
"label": "Retry",
|
|
109
|
+
"origin": "proposed",
|
|
110
|
+
"requirementIds": [
|
|
111
|
+
"reset-error-retry"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "expiry-decision",
|
|
116
|
+
"from": "address-entry",
|
|
117
|
+
"to": "expiry-policy",
|
|
118
|
+
"label": "Resolve policy",
|
|
119
|
+
"origin": "unknown",
|
|
120
|
+
"requirementIds": [
|
|
121
|
+
"reset-expiry"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "focus-requirement",
|
|
126
|
+
"from": "recoverable-error",
|
|
127
|
+
"to": "focus-recovery",
|
|
128
|
+
"label": "Accessible feedback",
|
|
129
|
+
"origin": "proposed",
|
|
130
|
+
"requirementIds": [
|
|
131
|
+
"reset-focus"
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"requirements": [
|
|
136
|
+
{
|
|
137
|
+
"id": "reset-entry",
|
|
138
|
+
"text": "The synthetic source includes an address-entry screen.",
|
|
139
|
+
"origin": "observed",
|
|
140
|
+
"sourceIds": [
|
|
141
|
+
"sample-brief"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "reset-confirmation",
|
|
146
|
+
"text": "The synthetic source includes a confirmation screen; its actual transition is proposed.",
|
|
147
|
+
"origin": "observed",
|
|
148
|
+
"sourceIds": [
|
|
149
|
+
"sample-brief"
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "reset-error-retry",
|
|
154
|
+
"text": "Proposed: preserve the entered address after a failed request and allow retry.",
|
|
155
|
+
"origin": "proposed"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "reset-expiry",
|
|
159
|
+
"text": "Unknown: expiry policy and treatment of repeated requests require a product/security decision.",
|
|
160
|
+
"origin": "unknown"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "reset-focus",
|
|
164
|
+
"text": "Proposed: focus and announced errors must support keyboard and screen-reader recovery.",
|
|
165
|
+
"origin": "proposed"
|
|
166
|
+
}
|
|
167
|
+
],
|
|
168
|
+
"findings": [
|
|
169
|
+
{
|
|
170
|
+
"id": "decide-request-contract",
|
|
171
|
+
"message": "No actual API contract or account-disclosure policy has been supplied.",
|
|
172
|
+
"severity": "blocking",
|
|
173
|
+
"status": "open"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"id": "design-error-state",
|
|
177
|
+
"message": "Recovery and accessible error presentation are proposals; no inspected frame supports them.",
|
|
178
|
+
"severity": "warning",
|
|
179
|
+
"status": "open"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"presentation": {
|
|
183
|
+
"fontFamily": "Inter"
|
|
184
|
+
},
|
|
185
|
+
"summary": "Request reset instructions and recover from failure.",
|
|
186
|
+
"description": "This unapproved planning fixture is grounded only in the synthetic brief. It illustrates the proposed reset flow without claiming inspected Penpot frames, actual application behavior or owner agreement. Request policy, recovery and accessibility behavior remain explicit decisions and verification work."
|
|
187
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Synthetic reset-password source
|
|
2
|
+
|
|
3
|
+
This is illustrative fixture text, not a Penpot inspection or approved product
|
|
4
|
+
requirement. It supplies reproducible local source bytes for the map examples.
|
|
5
|
+
|
|
6
|
+
The sample includes an address-entry screen and a confirmation screen.
|
|
7
|
+
The intended user goal is to request password-reset instructions.
|
|
8
|
+
No API, expiry policy, error recovery or focus behavior is established here.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@penpair/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "The penpair command for Penpot on the web (design.penpot.app or your team's own): guided setup, a safe write protocol, skills for AI agents. Includes everything in @penpair/core.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@penpair/core": "0.
|
|
51
|
+
"@penpair/core": "0.4.1"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "tsc -p tsconfig.json",
|