@volter/twin-googlefonts 1.0.1 → 1.0.2
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/api/spec/sources.json +11 -1
- package/api/src/semantics/doors.ts +4 -0
- package/css/spec/SOURCE.md +3 -1
- package/dist/api/spec/sources.json +11 -1
- package/dist/api/src/semantics/doors.js +4 -0
- package/dist/css/spec/SOURCE.md +3 -1
- package/dist/generated/pack-facts.json +68 -0
- package/dist/journeys/customer-life.json +81 -0
- package/dist/journeys/decisions.json +13 -3
- package/dist/journeys/demand.json +34 -0
- package/dist/src/cli.js +11 -10
- package/dist/src/manifest.js +4 -2
- package/dist/src/semantics/seed.js +40 -0
- package/generated/pack-facts.json +5 -2
- package/journeys/customer-life.json +81 -0
- package/journeys/decisions.json +13 -3
- package/journeys/demand.json +34 -0
- package/package.json +30 -14
- package/src/cli.ts +10 -10
- package/src/manifest.ts +4 -2
- package/src/semantics/seed.ts +40 -0
- package/vendor/SOURCE.md +7 -0
- package/vendor/inter-variable.json +52 -0
- package/dist/api/src/fetch.ts +0 -16
- package/dist/api/src/index.ts +0 -3
- package/dist/api/src/manifest.ts +0 -31
- package/dist/api/src/semantics/doors.ts +0 -131
- package/dist/api/src/semantics/index.ts +0 -8
- package/dist/api/src/semantics/shared.ts +0 -1
- package/dist/api/src/semantics/states.ts +0 -6
- package/dist/api/src/semantics/webfonts.ts +0 -32
- package/dist/assets/src/fetch.ts +0 -14
- package/dist/assets/src/index.ts +0 -3
- package/dist/assets/src/manifest.ts +0 -19
- package/dist/assets/src/semantics/index.ts +0 -10
- package/dist/assets/src/semantics/l.ts +0 -4
- package/dist/assets/src/semantics/s.ts +0 -4
- package/dist/assets/src/semantics/shared.ts +0 -13
- package/dist/css/src/fetch.ts +0 -14
- package/dist/css/src/index.ts +0 -3
- package/dist/css/src/manifest.ts +0 -19
- package/dist/css/src/semantics/css.ts +0 -19
- package/dist/css/src/semantics/css2.ts +0 -20
- package/dist/css/src/semantics/index.ts +0 -10
- package/dist/css/src/semantics/shared.ts +0 -1
- package/dist/journeys/customer-life.outline.md +0 -24
- package/dist/journeys/customer-life.outline.verdict.json +0 -82
- package/dist/journeys/customer-life.verdict.json +0 -149
- package/dist/vendor/Inter-OFL.txt +0 -93
- package/dist/vendor/OFL.txt +0 -94
- package/dist/vendor/SOURCE.md +0 -33
- package/dist/vendor/antic.json +0 -93
- package/dist/vendor/inputs.json +0 -460
- package/dist/vendor/inter.json +0 -44
- package/dist/vendor/noto-sans-sc-text.json +0 -24
- package/journeys/customer-life.outline.md +0 -24
- package/journeys/customer-life.outline.verdict.json +0 -82
- package/journeys/customer-life.verdict.json +0 -149
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"retained": "2026-10-15",
|
|
3
|
-
"source": "https://fonts.googleapis.com/css2 and the fonts.gstatic.com URL it returned, for Rallly's Open Graph request",
|
|
4
|
-
"observation": "Requested with no User-Agent, with \"node\" and with \"undici\"; Google answered the same bytes to all three.",
|
|
5
|
-
"observedUserAgents": [
|
|
6
|
-
"",
|
|
7
|
-
"node",
|
|
8
|
-
"undici"
|
|
9
|
-
],
|
|
10
|
-
"stylesheets2": [
|
|
11
|
-
{
|
|
12
|
-
"query": "family=Noto+Sans+SC:wght@700&text=%E6%8A%95%E7%A5%A8",
|
|
13
|
-
"userAgent": "",
|
|
14
|
-
"css": "@font-face {\n font-family: 'Noto Sans SC';\n font-style: normal;\n font-weight: 700;\n src: url(https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGzjCnYxVbhJZaZfsWA&skey=cf0bb10b5602fdc3&v=v41) format('truetype');\n}\n"
|
|
15
|
-
}
|
|
16
|
-
],
|
|
17
|
-
"assets": [
|
|
18
|
-
{
|
|
19
|
-
"url": "https://fonts.gstatic.com/l/font?kit=k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaGzjCnYxVbhJZaZfsWA&skey=cf0bb10b5602fdc3&v=v41",
|
|
20
|
-
"contentType": "font/ttf",
|
|
21
|
-
"base64": "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"
|
|
22
|
-
}
|
|
23
|
-
]
|
|
24
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Google Fonts used by google-webfonts-helper, Dub and Rallly
|
|
2
|
-
|
|
3
|
-
1. Google publishes the attributed Antic reference snapshot via the publisher
|
|
4
|
-
door (no Developer API font-creation endpoint exists). Actual item fields,
|
|
5
|
-
browser CSS and font bytes enter the shared World store.
|
|
6
|
-
2. The World asks appCredentials for its issued key.
|
|
7
|
-
3. The unchanged helper fetches the popularity-sorted catalog with that query
|
|
8
|
-
key; it consumes family/variants/subsets/category/version/lastModified and
|
|
9
|
-
chooses the returned Antic regular/latin record.
|
|
10
|
-
4. Each of its five exact UAs asks for Antic:regular/latin. The twin returns the
|
|
11
|
-
corresponding real CSS, preserving @font-face style/weight and gstatic URL.
|
|
12
|
-
5. Download every returned URL. The genuine EOT/WOFF/WOFF2/SVG/TTF bytes can feed
|
|
13
|
-
its ordinary JSZip archive.
|
|
14
|
-
6. Dub's Open Graph route asks CSS2 for Inter at one weight from its server; the
|
|
15
|
-
twin answers Google's retained truetype CSS and the returned gstatic URL
|
|
16
|
-
downloads the genuine Inter bytes.
|
|
17
|
-
7. Rallly's Open Graph image asks CSS2 for the glyphs of its CJK title (text=) from
|
|
18
|
-
its server; the twin answers Google's retained CSS for that request and the
|
|
19
|
-
returned URL downloads the genuine truetype subset.
|
|
20
|
-
|
|
21
|
-
The customer entry uses its pinned axios 1.20.0 and the ordinary env name.
|
|
22
|
-
Its prerequisite publisher operation uses the included actual source snapshot.
|
|
23
|
-
No journey, customer entry or application execution has been performed while
|
|
24
|
-
building; executable recipe data is retained for the final qualification phase.
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"judge": {
|
|
3
|
-
"agent": "Claude journey judge (Opus)",
|
|
4
|
-
"name": "Independent journey judge"
|
|
5
|
-
},
|
|
6
|
-
"authors": [
|
|
7
|
-
"yueranyuan",
|
|
8
|
-
"Aaron (A-001)",
|
|
9
|
-
"Claude Opus 5.5",
|
|
10
|
-
"Codex"
|
|
11
|
-
],
|
|
12
|
-
"sha256": "0eac01045d8500b03363a11644b863adf041b345d6f3edf1e11bd8a3944d80e3",
|
|
13
|
-
"judgedAt": "2026-10-15",
|
|
14
|
-
"plausible": true,
|
|
15
|
-
"rulings": [
|
|
16
|
-
{
|
|
17
|
-
"id": "refusals-without-cause",
|
|
18
|
-
"steps": [
|
|
19
|
-
"act 2",
|
|
20
|
-
"act 5",
|
|
21
|
-
"act 6",
|
|
22
|
-
"act 7"
|
|
23
|
-
],
|
|
24
|
-
"barItem": "a refusal without a cause the story shows, or the same cause drawn twice; a run of refusals",
|
|
25
|
-
"reason": "Act 2 refuses 'a key never issued by this World', act 5 refuses 'a URL without a published blob', act 6 refuses text= given twice and act 7 keeps 'an unpublished CSS representation' as a refused gap, but no actor in the story sends any of these: the pinned helper always sends the World's issued key (demand.json, fetchGoogleFonts.ts:62) and downloads only URLs Google's CSS returned, Dub sends no text= and Rallly sends one (https://developers.google.com/fonts/docs/css2: \"the 'text=' parameter can only be specified once\", so nobody here sends two). Together with act 6's other refusals they make a closing run of refusals.",
|
|
26
|
-
"correction": "Remove these four refusals from acts 2, 5, 6 and 7; keep a refusal only where an actor in the story has a reason to send that request."
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"id": "refusals-google-answers",
|
|
30
|
-
"steps": [
|
|
31
|
-
"act 6"
|
|
32
|
-
],
|
|
33
|
-
"barItem": "vendor behaviour the vendor's documentation contradicts",
|
|
34
|
-
"reason": "Act 6 says a browser asking CSS2 and Rallly's CJK text subset 'are refused'. Google documents text= for exactly this case: \"This feature also works for international fonts, allowing you to specify UTF-8 characters\" (https://developers.google.com/fonts/docs/css2, https://developers.google.com/fonts/docs/getting_started). It also documents the stylesheet link as something placed in an HTML document for the browser to fetch (getting_started: 'add a special stylesheet link to your HTML document'). Google answers both requests with a stylesheet, and Rallly, named in the outline's title, is left with no successful call.",
|
|
35
|
-
"correction": "In act 6, have Rallly's Noto Sans SC wght@700 text= request answered with Google's retained CSS2 response and its truetype file (published in act 1), or take Rallly out of the title and story. Drop the browser refusal."
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"id": "read-backs-without-need",
|
|
39
|
-
"steps": [
|
|
40
|
-
"act 2",
|
|
41
|
-
"act 6"
|
|
42
|
-
],
|
|
43
|
-
"barItem": "a read-back with no need: a list or get of what the story already holds, unless someone who does not hold it reads it",
|
|
44
|
-
"reason": "In act 2 the World asks for the key it was just issued again in the same sitting, before any resume. In act 6 the same CSS2 stylesheet is read a second time under a second server agent ('the same for node and undici'), but Dub is the only CSS2 caller and already holds it. That the two agents get the same answer is evidence for vendor/inter.json, not an act of anyone in the story.",
|
|
45
|
-
"correction": "Move the repeated key read into act 7's resume, where a re-booted World genuinely asks again, and drop the undici comparison from act 6."
|
|
46
|
-
}
|
|
47
|
-
],
|
|
48
|
-
"applied": {
|
|
49
|
-
"from": "7aa0eb6d1749ce9a2a716d778332a6a61257c666bcb5c50a4c89ecd333182ec4",
|
|
50
|
-
"wasPlausible": false,
|
|
51
|
-
"steps": [
|
|
52
|
-
"act 2",
|
|
53
|
-
"act 5",
|
|
54
|
-
"act 6",
|
|
55
|
-
"act 7"
|
|
56
|
-
],
|
|
57
|
-
"rulings": [
|
|
58
|
-
{
|
|
59
|
-
"steps": [
|
|
60
|
-
"act 2",
|
|
61
|
-
"act 5",
|
|
62
|
-
"act 6",
|
|
63
|
-
"act 7"
|
|
64
|
-
],
|
|
65
|
-
"why": "Remove these four refusals from acts 2, 5, 6 and 7; keep a refusal only where an actor in the story has a reason to send that request."
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"steps": [
|
|
69
|
-
"act 6"
|
|
70
|
-
],
|
|
71
|
-
"why": "In act 6, have Rallly's Noto Sans SC wght@700 text= request answered with Google's retained CSS2 response and its truetype file (published in act 1), or take Rallly out of the title and story. Drop the browser refusal."
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
"steps": [
|
|
75
|
-
"act 2",
|
|
76
|
-
"act 6"
|
|
77
|
-
],
|
|
78
|
-
"why": "Move the repeated key read into act 7's resume, where a re-booted World genuinely asks again, and drop the undici comparison from act 6."
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"judge": {
|
|
3
|
-
"agent": "Claude journey judge (Opus)",
|
|
4
|
-
"name": "Independent journey judge"
|
|
5
|
-
},
|
|
6
|
-
"authors": [
|
|
7
|
-
"yueranyuan",
|
|
8
|
-
"Aaron (A-001)",
|
|
9
|
-
"Claude Opus 5.5",
|
|
10
|
-
"Codex"
|
|
11
|
-
],
|
|
12
|
-
"sha256": "972a67216217fd8b66ec8e08aea3ae853be3ed61f79bf5774811cbcead2e56b9",
|
|
13
|
-
"judgedAt": "2026-10-15",
|
|
14
|
-
"plausible": true,
|
|
15
|
-
"rulings": [
|
|
16
|
-
{
|
|
17
|
-
"id": "resume-never-performed",
|
|
18
|
-
"steps": [
|
|
19
|
-
2,
|
|
20
|
-
"act 7"
|
|
21
|
-
],
|
|
22
|
-
"barItem": "a stated cause that never happens, and a promise never kept",
|
|
23
|
-
"reason": "Step 2 is named 'A repeat boot reads the same key', but the life has no repeat boot: it runs without a break from step 0 to step 24. The outline's act 7 ('Resume and read the same catalog/key/bytes without reseeding') is never performed by any step; the life ends on refusals.",
|
|
24
|
-
"correction": "Move step 2 after step 24, behind a wait (for example `1d`) and the World's resume. Follow it with the restarted helper's startup catalog fetch (www.googleapis.com/webfonts/v1/webfonts?sort=popularity&key={key}) and one download of a stored font URL, with no reseed. Alternatively, delete step 2 and act 7."
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "key-refusals-without-cause",
|
|
28
|
-
"steps": [
|
|
29
|
-
3,
|
|
30
|
-
4
|
|
31
|
-
],
|
|
32
|
-
"barItem": "a refusal without a cause the story shows, or the same cause drawn twice; a run of refusals",
|
|
33
|
-
"reason": "Step 3 (no key, 403) and step 4 (key=not-issued, 400) are two refusals in a row that no actor causes. The developer API page requires the key on every request (https://developers.google.com/fonts/docs/developer_api: 'including an API key with each request'), and the pinned helper always sends the World's issued key (demand.json, fetchGoogleFonts.ts:62). Nobody in the story sends a request without one or with a foreign key.",
|
|
34
|
-
"correction": "Remove steps 3 and 4."
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"id": "discovery-read-back",
|
|
38
|
-
"steps": [
|
|
39
|
-
6
|
|
40
|
-
],
|
|
41
|
-
"barItem": "a read-back with no need: a list or get of what the story already holds, unless someone who does not hold it reads it",
|
|
42
|
-
"reason": "Step 6 reads the same catalog again through the Discovery base webfonts.googleapis.com/v1/webfonts directly after step 5 returned it. No application in demand.json calls that host, and the reader already holds the catalog; the step only shows that a second door exists.",
|
|
43
|
-
"correction": "Remove step 6."
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": "second-agent-read-back",
|
|
47
|
-
"steps": [
|
|
48
|
-
19
|
|
49
|
-
],
|
|
50
|
-
"barItem": "a read-back with no need: a list or get of what the story already holds, unless someone who does not hold it reads it",
|
|
51
|
-
"reason": "Step 19 repeats step 17's CSS2 request for Inter wght@600 under User-Agent 'undici'. Dub's Open Graph route is the only CSS2 caller and already holds that stylesheet from step 17. No actor in the story sends 'undici'; that the two agents get the same answer is recorded in vendor/inter.json, not an act of the story.",
|
|
52
|
-
"correction": "Remove step 19."
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "browser-refused",
|
|
56
|
-
"steps": [
|
|
57
|
-
20
|
|
58
|
-
],
|
|
59
|
-
"barItem": "vendor behaviour the vendor's documentation contradicts",
|
|
60
|
-
"reason": "Step 20 expects 400 when Chrome requests css2?family=Inter:wght@600. Google documents the CSS API as a stylesheet link 'add[ed] to your HTML document' that the browser fetches (https://developers.google.com/fonts/docs/getting_started; https://developers.google.com/fonts/docs/css2 uses the same link form), and Google answers a browser with a stylesheet. No browser acts anywhere in this story, so the refusal also has no cause.",
|
|
61
|
-
"correction": "Remove step 20."
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": "rallly-text-subset-refused",
|
|
65
|
-
"steps": [
|
|
66
|
-
21
|
|
67
|
-
],
|
|
68
|
-
"barItem": "vendor behaviour the vendor's documentation contradicts",
|
|
69
|
-
"reason": "Step 21 expects 400 for Rallly's demanded request css2?family=Noto+Sans+SC:wght@700&text=%E6%8A%95%E7%A5%A8 (demand.json, opengraph-image.tsx:26-27). Google documents that text= \"also works for international fonts, allowing you to specify UTF-8 characters\" (https://developers.google.com/fonts/docs/css2; https://developers.google.com/fonts/docs/getting_started), so Google answers this request with a truetype stylesheet. The life's title and outline name Rallly as a customer, yet Rallly's only call is refused.",
|
|
70
|
-
"correction": "Publish Google's retained CSS2 answer for this query and its truetype file in step 0. Then have step 21 expect 200 with that CSS, followed by Rallly downloading the returned URL. Alternatively, remove Rallly from the life and its outline."
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"id": "closing-refusal-run",
|
|
74
|
-
"steps": [
|
|
75
|
-
22,
|
|
76
|
-
23,
|
|
77
|
-
24
|
|
78
|
-
],
|
|
79
|
-
"barItem": "a refusal without a cause the story shows, or the same cause drawn twice; a run of refusals",
|
|
80
|
-
"reason": "Steps 20 to 24 end the life with five refusals in a row. No actor causes the last three. Step 22 sends text= twice; css2 says \"the 'text=' parameter can only be specified once\" (https://developers.google.com/fonts/docs/css2), but Dub sends no text= and Rallly sends one. Step 23 fetches a gstatic path that no returned CSS named. Step 24 asks /css for an unknown family with no User-Agent, and its name ('Unsupported CSS representation') does not describe that content.",
|
|
81
|
-
"correction": "Remove steps 22, 23 and 24."
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"applied": {
|
|
85
|
-
"from": "dce73bf66e60fd8002ddad46300d59d0872d4db74aed76d1317ad2fe5392ef9b",
|
|
86
|
-
"wasPlausible": false,
|
|
87
|
-
"steps": [
|
|
88
|
-
"19",
|
|
89
|
-
"2",
|
|
90
|
-
"20",
|
|
91
|
-
"21",
|
|
92
|
-
"22",
|
|
93
|
-
"23",
|
|
94
|
-
"24",
|
|
95
|
-
"3",
|
|
96
|
-
"4",
|
|
97
|
-
"6",
|
|
98
|
-
"act 7"
|
|
99
|
-
],
|
|
100
|
-
"rulings": [
|
|
101
|
-
{
|
|
102
|
-
"steps": [
|
|
103
|
-
2,
|
|
104
|
-
"act 7"
|
|
105
|
-
],
|
|
106
|
-
"why": "Move step 2 after step 24, behind a wait (for example `1d`) and the World's resume. Follow it with the restarted helper's startup catalog fetch (www.googleapis.com/webfonts/v1/webfonts?sort=popularity&key={key}) and one download of a stored font URL, with no reseed. Alternatively, delete step 2 and act 7."
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"steps": [
|
|
110
|
-
3,
|
|
111
|
-
4
|
|
112
|
-
],
|
|
113
|
-
"why": "Remove steps 3 and 4."
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"steps": [
|
|
117
|
-
6
|
|
118
|
-
],
|
|
119
|
-
"why": "Remove step 6."
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
"steps": [
|
|
123
|
-
19
|
|
124
|
-
],
|
|
125
|
-
"why": "Remove step 19."
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
"steps": [
|
|
129
|
-
20
|
|
130
|
-
],
|
|
131
|
-
"why": "Remove step 20."
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"steps": [
|
|
135
|
-
21
|
|
136
|
-
],
|
|
137
|
-
"why": "Publish Google's retained CSS2 answer for this query and its truetype file in step 0. Then have step 21 expect 200 with that CSS, followed by Rallly downloading the returned URL. Alternatively, remove Rallly from the life and its outline."
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
"steps": [
|
|
141
|
-
22,
|
|
142
|
-
23,
|
|
143
|
-
24
|
|
144
|
-
],
|
|
145
|
-
"why": "Remove steps 22, 23 and 24."
|
|
146
|
-
}
|
|
147
|
-
]
|
|
148
|
-
}
|
|
149
|
-
}
|