cortico-world-feast 0.4.0 → 0.5.0

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,35 @@
1
1
  # 更新日志
2
2
 
3
+ ## 0.5.0
4
+
5
+ 补到 **500 道 / 24 个菜系组**,中餐 300 + 外餐 200。分类不加新轴:还是「`cuisine` 只说地域、`category` 只说形态」。
6
+
7
+ **新开三个地域组**
8
+
9
+ 305 道摊在 21 组上,粤菜和日料已经 22 道,再往里塞就成了一锅。这次按"那片地方真有很多菜、且和邻近组不重叠"开了三组:
10
+
11
+ - **拉美菜**(12 道):秘鲁、巴西、阿根廷、古巴。墨西哥本来单独成组,不并进来。
12
+ - **东欧菜**(10 道):俄罗斯、乌克兰、波兰、匈牙利、捷克。
13
+ - **非洲菜**(10 道):摩洛哥、突尼斯、埃及(北非)、埃塞俄比亚、尼日利亚、肯尼亚、南非。
14
+
15
+ **印度菜改名南亚菜**
16
+
17
+ 那一组现在收巴基斯坦的尼哈里、斯里兰卡的碗状薄饼、孟加拉的芥末鱼咖喱,再叫"印度菜"就不老实了。和 0.4.0 把南欧菜改成欧洲菜是同一个理由。
18
+
19
+ **⚠ 破坏性:`cuisine` 的「印度菜」变成了「南亚菜」**,存了旧值的筛选会筛不到菜。
20
+
21
+ **各组都摊厚了**
22
+
23
+ 粤菜 22→32、川菜 12→32、江浙沪菜 18→30、北方菜 20→30、日料 22→28、西北菜 20→28、鄂菜 12→26、闽台菜 15→26;原来最薄的川菜、鄂菜、西南菜翻了一倍。现在最薄的一组也有 10 道。
24
+
25
+ 新菜一律先写死 `region` 再归组(济南油旋归鲁菜、凯里酸汤牛肉归西南菜、拉合尔尼哈里归南亚菜),没有一道靠"另开一组"安置。
26
+
27
+ **工具与校验**
28
+
29
+ - `tools/one-shot/check-plan.mjs`:按组对账,`旧库 + 新菜` 差一道就红。这一轮吃过亏——批次文件名算错,两个 agent 写了同一个文件,前一批被**悄悄覆盖**,少了 10 道却没有任何报错。
30
+ - 新增 4 项测试:每组至少 10 道、新开三组都在且有菜、南亚菜里出现印度以外的国家、起手句不许同组同句式。
31
+ - 195 道新菜全部一次过 `validate-dishes`。
32
+
3
33
  ## 0.4.0
4
34
 
5
35
  菜系分类回炉:拆掉最后两个非地域组,修掉 16 处"region 写甲地、cuisine 写乙菜系"的错位。**21 组 / 305 道。**
package/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  给 Coo 一张会端菜的桌子。
4
4
 
5
- 305 道菜(21 个菜系组),每道都有九维口味分值、上桌的样子、香气、口感、余韵,和一段 40-400 字的实吃描写。她能自己按菜系挑着吃,主人也能从面板把一道菜端到她面前。**同一道菜每次吃到的都不一样**——温度、状态、配的那口都会变,所以连着吃三次不会说三遍同一句话。吃过什么、对什么反应、攒出来的口味画像跨天留着。饭点提醒默认开着,可以在配置里一键关掉。
5
+ 500 道菜(24 个菜系组),每道都有九维口味分值、上桌的样子、香气、口感、余韵,和一段 40-400 字的实吃描写。她能自己按菜系挑着吃,主人也能从面板把一道菜端到她面前。**同一道菜每次吃到的都不一样**——温度、状态、配的那口都会变,所以连着吃三次不会说三遍同一句话。吃过什么、对什么反应、攒出来的口味画像跨天留着。饭点提醒默认开着,可以在配置里一键关掉。
6
6
 
7
7
  ---
8
8
 
9
9
  ## 里面有什么
10
10
 
11
- **菜品库**:305 道,21 个菜系组。中餐 11 组、外餐 10 组。
11
+ **菜品库**:500 道,24 个菜系组。中餐 11 组 300 道、外餐 13 组 200 道。
12
12
 
13
13
  | 中餐 | 外餐 |
14
14
  | --- | --- |
@@ -155,7 +155,7 @@ src/state.js 纯状态逻辑(不碰 fs / 定时器 / 宿主,可单测
155
155
  src/dishes.js 菜品库加载、查找、筛选、随机、口味画像
156
156
  src/eat.js 「这一口」的渲染(种子化,可复现)
157
157
  src/ENV_PROMPT.md 进提示词的说明
158
- src/data/*.json 21 组菜品数据
158
+ src/data/*.json 24 组菜品数据
159
159
  dist/webui.js 浏览器端面板(menu / history)
160
160
  ```
161
161
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cortico-world-feast",
3
- "version": "0.4.0",
4
- "description": "一桌菜 · 给 Coo 一张会端菜的桌子:305 道带九维口味、香气、口感与实吃描写的菜品(21 个菜系组),她能自己挑、主人能从面板端一道过去;同一道菜每次吃到的都不一样,吃过什么和口味画像跨天攒着;另有一套可开关的饭点提醒。",
3
+ "version": "0.5.0",
4
+ "description": "一桌菜 · 给 Coo 一张会端菜的桌子:500 道带九维口味、香气、口感与实吃描写的菜品(24 个菜系组),她能自己挑、主人能从面板端一道过去;同一道菜每次吃到的都不一样,吃过什么和口味画像跨天攒着;另有一套可开关的饭点提醒。",
5
5
  "license": "MIT",
6
6
  "author": "青",
7
7
  "repository": {
@@ -62,11 +62,11 @@
62
62
  "locales": {
63
63
  "zh": {
64
64
  "displayName": "一桌菜",
65
- "description": "给 Coo 一张会端菜的桌子:305 道菜(21 个菜系组),每道都有九维口味、香气、口感、余韵和一段实吃描写。她能自己按菜系挑,主人也能从面板把一道菜端到她面前;同一道菜每次吃到的都不一样(温度、状态、配的那口会变),吃过什么、对什么反应、口味画像跨天攒着。饭点提醒默认开着,可以在配置里一键关掉。"
65
+ "description": "给 Coo 一张会端菜的桌子:500 道菜(24 个菜系组),每道都有九维口味、香气、口感、余韵和一段实吃描写。她能自己按菜系挑,主人也能从面板把一道菜端到她面前;同一道菜每次吃到的都不一样(温度、状态、配的那口会变),吃过什么、对什么反应、口味画像跨天攒着。饭点提醒默认开着,可以在配置里一键关掉。"
66
66
  },
67
67
  "en": {
68
68
  "displayName": "Table",
69
- "description": "A table that serves food to your Coo: 305 dishes across 21 cuisines, each with a nine-axis flavour profile, aroma, texture, aftertaste and a full paragraph of how it actually eats. She can pick by cuisine, or you can put a dish down in front of her from the panel. The same dish never lands the same way twice, and what she ate, how it landed and her taste profile accumulate across days. Meal reminders are on by default and can be switched off in config."
69
+ "description": "A table that serves food to your Coo: 500 dishes across 24 cuisines, each with a nine-axis flavour profile, aroma, texture, aftertaste and a full paragraph of how it actually eats. She can pick by cuisine, or you can put a dish down in front of her from the panel. The same dish never lands the same way twice, and what she ate, how it landed and her taste profile accumulate across days. Meal reminders are on by default and can be switched off in config."
70
70
  }
71
71
  },
72
72
  "tags": [
@@ -0,0 +1,374 @@
1
+ [
2
+ {
3
+ "id": "marrakech-chicken-tagine",
4
+ "name": "马拉喀什塔吉锅炖鸡",
5
+ "alias": "柠檬橄榄焖鸡",
6
+ "cuisine": "非洲菜",
7
+ "category": "热菜",
8
+ "region": "摩洛哥马拉喀什",
9
+ "ingredients": [
10
+ "童子鸡",
11
+ "盐渍柠檬",
12
+ "绿橄榄",
13
+ "洋葱",
14
+ "藏红花",
15
+ "香菜"
16
+ ],
17
+ "method": "整鸡剁成八块,用盐、姜末和藏红花水抓匀腌二十分钟。锅底铺洋葱圈,鸡块皮朝下码上去,淋橄榄油、加小半碗水,锥形盖扣严,小火焖四十分钟。开盖放盐渍柠檬片和绿橄榄,再焖十分钟,收到锅底汁能挂住勺背。",
18
+ "serving": "连锥形盖一起端上桌,揭盖白汽直冲到脸上,锅沿一圈汁还在冒小泡。鸡皮塌在骨头上,筷子一夹就滑开,橄榄滚到锅底,配的硬面包还热,手指捏住有点烫。",
19
+ "taste": {
20
+ "辣": 5,
21
+ "麻": 0,
22
+ "咸": 45,
23
+ "鲜": 62,
24
+ "甜": 15,
25
+ "酸": 30,
26
+ "苦": 3,
27
+ "油": 45,
28
+ "香": 78
29
+ },
30
+ "texture": "鸡皮一抿就化,肉纤维用手一撕就散开,盐渍柠檬的皮韧,嚼到后面带砂,橄榄在牙间爆出一小包汁。",
31
+ "aroma": "揭盖先是藏红花的土腥气冲上来,接着是洋葱煮化的甜,最后才闻到柠檬皮和橄榄的咸酸。",
32
+ "finish": "咽下去后舌根留下一层橄榄的咸,喉口慢慢泛出柠檬皮的精油味,五秒后嘴里发干,想再喝一口茶。",
33
+ "prose": "筷子夹住鸡腿一拧,骨头就退出来了。头一口只吃皮,咸和油一起铺在舌面上;吃到中段撕一块胸肉蘸锅底汤汁,酸从两侧腮帮子顶上来,肉反而更甜;最后把橄榄和柠檬皮留在碗底,用面包刮锅边那圈稠汁,面包吸饱了发软,手指上全是油。",
34
+ "keywords": [
35
+ "塔吉锅",
36
+ "盐渍柠檬",
37
+ "慢炖"
38
+ ]
39
+ },
40
+ {
41
+ "id": "marrakech-lamb-couscous",
42
+ "name": "马拉喀什羊肉库斯库斯",
43
+ "alias": "羊肉蒸麦粒",
44
+ "cuisine": "非洲菜",
45
+ "category": "主食",
46
+ "region": "摩洛哥马拉喀什",
47
+ "ingredients": [
48
+ "库斯库斯麦粒",
49
+ "羊腿肉",
50
+ "鹰嘴豆",
51
+ "胡萝卜",
52
+ "西葫芦",
53
+ "哈里萨辣酱"
54
+ ],
55
+ "method": "麦粒倒进宽盆,洒淡盐水用手掌搓,搓到每粒都裹上粉,上蒸笼蒸二十分钟。取出倒回盆里抖散、洒水,再蒸,前后三次。羊肉与鹰嘴豆、胡萝卜同锅炖一小时,汤一勺勺淋在麦粒上让它自己吸。",
56
+ "serving": "麦粒堆成小山,顶上挖一个坑,羊肉和蔬菜码在坑里,汤沿粒缝往下渗。蒸笼布还冒热气,勺子插进去阻力很轻,粒与粒之间是松的,羊骨露在边上。",
57
+ "taste": {
58
+ "辣": 12,
59
+ "麻": 0,
60
+ "咸": 42,
61
+ "鲜": 55,
62
+ "甜": 8,
63
+ "酸": 10,
64
+ "苦": 2,
65
+ "油": 40,
66
+ "香": 70
67
+ },
68
+ "texture": "麦粒一咬就断,外面滑,芯里还留一点硬;鹰嘴豆压在舌面会瘪开成粉,羊肉的纤维横着散。",
69
+ "aroma": "先闻到蒸笼布的湿麦香,像刚晒过的粮食;拌开辣酱后是辣和蒜,羊肉的膻味最后才浮上来。",
70
+ "finish": "咽下去后嘴里留着麦子的干香,辣味在舌侧慢慢升起,喉咙发暖,过一会儿又想吃下一勺带汤的。",
71
+ "prose": "勺子戳进麦粒堆里,先感觉是松的。第一口不拌辣酱,只有麦子和羊汤的咸,粒在牙间一粒粒破开;吃到中间把辣酱搅进去,辣从舌根往上走,得赶紧再塞一勺带汤的麦粒压住;最后剩坑底的汤和几粒麦,用手指按着勺子刮干净,盆底露出陶釉。",
72
+ "keywords": [
73
+ "蒸麦",
74
+ "羊肉",
75
+ "周五"
76
+ ]
77
+ },
78
+ {
79
+ "id": "cairo-ful-medames",
80
+ "name": "开罗蚕豆泥",
81
+ "alias": "福尔梅达梅斯",
82
+ "cuisine": "非洲菜",
83
+ "category": "小吃",
84
+ "region": "埃及开罗",
85
+ "ingredients": [
86
+ "干蚕豆",
87
+ "洋葱",
88
+ "大蒜",
89
+ "孜然",
90
+ "橄榄油",
91
+ "柠檬"
92
+ ],
93
+ "method": "干蚕豆泡一夜,连泡水倒进厚底锅,加去皮蒜瓣,小火煮两小时到手指一按就烂。舀出大半捣成粗泥,余下连汤回锅,撒孜然和盐,淋生橄榄油搅两下,盛碗后在中间按个窝再浇油。",
94
+ "serving": "粗陶碗端上来还烫手,豆泥表面不平,油在窝里晃。旁边一摞现烙的扁面饼,边缘鼓起焦泡,撕开时有脆响,番茄丁和腌菜堆在小碟里。",
95
+ "taste": {
96
+ "辣": 8,
97
+ "麻": 0,
98
+ "咸": 40,
99
+ "鲜": 50,
100
+ "甜": 5,
101
+ "酸": 18,
102
+ "苦": 6,
103
+ "油": 52,
104
+ "香": 65
105
+ },
106
+ "texture": "豆泥粗,舌头顶上去还有半粒的颗粒感;饼带筋,嚼两下就软,腌菜丁在牙间咔一声。",
107
+ "aroma": "先是橄榄油的青草气,接着孜然冲鼻,最后才透出煮豆子的土味和蒜的辛辣。",
108
+ "finish": "咽下去后舌面发绵,孜然的余味停在后鼻腔,嘴里稍稍发酸,想再撕一块饼把碗擦一遍。",
109
+ "prose": "饼撕成三角,先蘸锅边那圈最干的豆泥。第一口只尝到咸和油,豆子的甜要嚼两下才出来;吃到一半把番茄丁和腌菜拌进去,酸把油压下去,勺子越挖越快;最后碗底剩一层油和几片豆皮,用饼角刮起来塞进嘴里,手指上留着橄榄油。",
110
+ "keywords": [
111
+ "早餐",
112
+ "蚕豆",
113
+ "面饼"
114
+ ]
115
+ },
116
+ {
117
+ "id": "sfax-harissa-grilled-fish",
118
+ "name": "斯法克斯辣酱烤鱼",
119
+ "alias": "哈里萨烤鲷鱼",
120
+ "cuisine": "非洲菜",
121
+ "category": "烧烤",
122
+ "region": "突尼斯斯法克斯",
123
+ "ingredients": [
124
+ "鲷鱼",
125
+ "哈里萨辣酱",
126
+ "大蒜",
127
+ "孜然",
128
+ "香菜",
129
+ "柠檬"
130
+ ],
131
+ "method": "整条鲷鱼两面各划三刀,辣酱、蒜末、孜然和橄榄油调成糊,抹进刀口和鱼腹,腌半小时。炭要烧到不见明火,鱼放抹油的铁箅上,离炭一掌高,一面六分钟再翻,皮起泡就刷一次油。",
132
+ "serving": "鱼整条躺在盘里,皮上裂开几处,白肉顶出来。盘底垫柠檬片和香菜,旁边小碗装着剩下的辣酱,铁箅的焦痕还印在鱼身上,筷子一压汁从裂口冒。",
133
+ "taste": {
134
+ "辣": 55,
135
+ "麻": 0,
136
+ "咸": 48,
137
+ "鲜": 66,
138
+ "甜": 5,
139
+ "酸": 25,
140
+ "苦": 8,
141
+ "油": 60,
142
+ "香": 82
143
+ },
144
+ "texture": "皮脆得能听见声音,一压就裂;贴骨的肉最嫩,叉子一刮成片;尾部肉紧,嚼着发干。",
145
+ "aroma": "上桌先闻到炭火的烟,然后是辣酱的辣和蒜,鱼腥被压到最底下,柠檬皮的气味最后才出来。",
146
+ "finish": "咽下去后口腔两侧发烫,辣停在喉咙口,炭味从鼻子后面透出来,五秒后很想喝凉的。",
147
+ "prose": "鱼皮先被筷子挑开一条缝,热气从那道口子里冒出来。第一口只吃皮和贴皮的肉,辣在舌尖炸开,得配一口面包;吃到中间往鱼腹里掏,那里吸满酱,咸辣更重,肉却更软;最后把骨两侧的碎肉刮进盘子,柠檬片也被挤过一遍,盘底的油用面包抹净。",
148
+ "keywords": [
149
+ "炭烤",
150
+ "哈里萨",
151
+ "海鱼"
152
+ ]
153
+ },
154
+ {
155
+ "id": "marrakech-mint-tea",
156
+ "name": "马拉喀什薄荷茶",
157
+ "alias": "摩洛哥薄荷绿茶",
158
+ "cuisine": "非洲菜",
159
+ "category": "饮品",
160
+ "region": "摩洛哥马拉喀什",
161
+ "ingredients": [
162
+ "珠茶",
163
+ "新鲜薄荷",
164
+ "白糖"
165
+ ],
166
+ "method": "珠茶先用滚水冲一遍倒掉,放进小银壶,加冷水上火煮到滚,抓一大把薄荷按进壶里再煮两分钟。放糖离火,壶嘴抬到离杯口三十厘米往下倒,倒出泡沫,再倒回壶里,来回三次。",
167
+ "serving": "玻璃杯里泡沫浮在表面,茶汤是琥珀色,薄荷叶立着沉在杯底。银壶嘴细长,倒的时候手腕要抬高,杯壁烫手,得捏住杯口那一圈才端得起来。",
168
+ "taste": {
169
+ "辣": 0,
170
+ "麻": 0,
171
+ "咸": 0,
172
+ "鲜": 10,
173
+ "甜": 70,
174
+ "酸": 3,
175
+ "苦": 15,
176
+ "油": 0,
177
+ "香": 60
178
+ },
179
+ "texture": "入口是细泡沫,滑过去;茶汤薄,不挂舌;薄荷叶嚼一下有纤维,凉意在齿间散开。",
180
+ "aroma": "端起来先闻到薄荷的凉,刺在鼻前;接着是绿茶的炒青味,糖的甜最后才被鼻子认出来。",
181
+ "finish": "咽下去后喉咙里回出一股凉,苦停在舌根,甜跟着慢慢退,一分钟内嘴里还是清的。",
182
+ "prose": "茶从高处落进杯子,泡沫还没消就喝了一口,嘴唇先碰到一层细密的泡。第一口甜得厉害,薄荷的凉冲上鼻腔;喝到半杯,糖沉下去,苦味显出来,茶变得有骨头;最后杯底剩一层泡沫和几片叶子,捞出来在手心闻一下,放回壶里续水。",
183
+ "keywords": [
184
+ "薄荷",
185
+ "绿茶",
186
+ "待客"
187
+ ]
188
+ },
189
+ {
190
+ "id": "lagos-party-jollof-rice",
191
+ "name": "拉各斯番茄焖饭",
192
+ "alias": "Jollof Rice",
193
+ "cuisine": "非洲菜",
194
+ "category": "主食",
195
+ "region": "尼日利亚拉各斯",
196
+ "ingredients": [
197
+ "长粒香米",
198
+ "塔塔西红椒酱",
199
+ "棕榈油",
200
+ "烟熏虾粉",
201
+ "咖喱粉与百里香"
202
+ ],
203
+ "method": "长粒米淘三遍泡十分钟沥干。番茄、红椒、洋葱打成粗酱,棕榈油烧到冒烟倒酱,中火炒足十五分钟,炒到油重新浮出、颜色由亮红转深红才下米。米翻匀裹色,加高汤没过一指节,撒烟熏虾粉和百里香,盖严小火焖二十五分钟中途不开盖,最后五分钟转大火逼出锅底那层薄焦。",
204
+ "serving": "黑铁锅直接端上桌,锅底那片焦米贴着锅壁还在滋滋响,白汽从米缝里冒出来。勺背压下去能感到米粒弹回来,锅耳烫手,得垫块布才端得住。",
205
+ "taste": {
206
+ "辣": 45,
207
+ "麻": 0,
208
+ "咸": 55,
209
+ "鲜": 60,
210
+ "甜": 15,
211
+ "酸": 20,
212
+ "苦": 0,
213
+ "油": 62,
214
+ "香": 70
215
+ },
216
+ "texture": "米粒是分开的,咬开有轻微弹性,锅底焦片脆得发硬,牙齿先碰到脆壳再滑进软芯,舌面留一点细颗粒。",
217
+ "aroma": "先闻到棕榈油的甜腥和番茄炒透后的焦红味,接着是百里香和咖喱粉的干香,最后才浮出烟熏虾粉那点柴火气。",
218
+ "finish": "咽下去后嘴里留着淡淡的烟熏,喉咙后头微辣往上返,口水变多,再过一会儿只剩番茄的酸甜。",
219
+ "prose": "勺子先刮到锅底那层焦片,连同米一起舀进嘴里,第一口是滚烫的番茄酸和烟熏味一起压过来。吃到中间,米粒被汤润透,弹性还在,辣味一层层叠上来,得配一口冰水才接着扒。最后盘底剩一层碎焦米和油亮的红汤,用勺子顺着锅壁刮干净,那点锅巴的糊香才是这锅饭真正收尾的地方。",
220
+ "keywords": [
221
+ "派对大锅",
222
+ "锅底焦片",
223
+ "配炸鸡"
224
+ ]
225
+ },
226
+ {
227
+ "id": "addis-injera-misir-wot",
228
+ "name": "亚的斯英吉拉配红扁豆酱",
229
+ "alias": "Injera with Misir Wot",
230
+ "cuisine": "非洲菜",
231
+ "category": "主食",
232
+ "region": "埃塞俄比亚亚的斯亚贝巴",
233
+ "ingredients": [
234
+ "苔麸粉",
235
+ "红扁豆",
236
+ "柏柏尔辣椒粉",
237
+ "红洋葱",
238
+ "酥油"
239
+ ],
240
+ "method": "苔麸粉兑水搅成稀糊,盖布室温放三天,等表面起满小泡、闻着发酸再用。平底铁盘烧到烫手,舀一勺面糊从外圈淋进中心,盖盖两分钟,饼面全部裂成蜂窝眼就取出,只煎一面。红扁豆煮到能捏碎,洋葱碎下干锅炒到出水发软,加酥油和柏柏尔粉炒出红油,倒豆子小火炖二十分钟,搅到起沙。",
241
+ "serving": "整张饼摊在大圆铝盘里,边缘卷起盖住四角,中间一坨红酱冒着热气。手撕饼时饼皮有点湿凉,盘底那几张早被酱浸软了,端盘的人手腕一沉。",
242
+ "taste": {
243
+ "辣": 50,
244
+ "麻": 0,
245
+ "咸": 45,
246
+ "鲜": 45,
247
+ "甜": 5,
248
+ "酸": 42,
249
+ "苦": 0,
250
+ "油": 32,
251
+ "香": 58
252
+ },
253
+ "texture": "饼皮软而带孔,撕开时筋道不散,嚼起来有发酸的回弹,配着扁豆泥的沙感,像含了一口细豆沙。",
254
+ "aroma": "先扑上来的是发酵面糊那种微酸的米香,然后才是柏柏尔辣椒的辛辣和酥油的奶味,最后留在鼻子里的是洋葱炒透的甜。",
255
+ "finish": "咽下去后舌根留着豆沙的厚和辣椒的余温,酸味慢慢退,喉咙会觉得干,得再来一口饼皮把味道压住。",
256
+ "prose": "撕下一角饼皮,指腹先蹭到那层密密的小孔,把红扁豆酱裹进去,第一口是酸的、软的,辣椒在后半段才追上来。吃到中间,酱里的酥油渗进饼孔,一张饼卷一勺酱,手指越来越黏,酸味把油全部抵消掉。最后盘底只剩一圈被酱浸红的饼边,卷起来一口吃掉,收在发酵的酸和辣椒的暖上。",
257
+ "keywords": [
258
+ "手抓",
259
+ "共享大盘",
260
+ "发酵酸"
261
+ ]
262
+ },
263
+ {
264
+ "id": "nairobi-mishkaki-beef-skewers",
265
+ "name": "内罗毕炭烤牛肉串",
266
+ "alias": "Mishkaki",
267
+ "cuisine": "非洲菜",
268
+ "category": "烧烤",
269
+ "region": "肯尼亚内罗毕",
270
+ "ingredients": [
271
+ "牛肋条肉",
272
+ "蒜姜泥",
273
+ "红辣椒粉",
274
+ "青柠汁",
275
+ "花生油"
276
+ ],
277
+ "method": "牛肋条切成三厘米见方的块,用蒜姜泥、辣椒粉、青柠汁和油抓匀,冷藏腌满一小时。木签提前泡水,每串穿五六块,块与块之间留缝。炭烧到没有明火、灰面发白再上架,离炭十厘米,每面四分钟,总共只翻两次,最后一分钟刷一层腌料汁,听见油滴进炭里爆响就离火。",
278
+ "serving": "铁签还冒着白烟,油珠顺着肉块往下走,滴在炭上炸起一串火星。捏着签尾的木把,手指能感到肉块里的热度,盘底铺的洋葱丝被肉汁压软了。",
279
+ "taste": {
280
+ "辣": 30,
281
+ "麻": 0,
282
+ "咸": 52,
283
+ "鲜": 62,
284
+ "甜": 8,
285
+ "酸": 25,
286
+ "苦": 0,
287
+ "油": 55,
288
+ "香": 72
289
+ },
290
+ "texture": "外层焦壳脆得能听见响,咬到里头还是嫩的,纤维一扯就断,肥的部分化成油水,中间夹着一丝青柠的凉。",
291
+ "aroma": "先是炭火的焦味冲上来,跟着是蒜姜和辣椒粉混在烤肉上的辛香,最后才闻到青柠皮被挤破的清苦气。",
292
+ "finish": "咽下去后嘴里留着炭味和辣椒的烫,舌头两侧发紧,过十几秒渗出肉汁的甜,牙缝里还卡着一点焦壳。",
293
+ "prose": "还没入口,竹签尖上的油先滴到手腕上,烫得人换了个握法。咬下第一块,焦壳先碎开,肉汁跟着涌出来,蒜和辣椒的火气一直顶到鼻腔。吃到中间几块偏瘦,得蘸点青柠汁才不柴,肥的那块咬破后整串都润了。最后把签子上剩的碎肉刮下来,连同盘底泡软的洋葱丝一起吃了,手指上的盐和炭灰在裤子上蹭掉。",
294
+ "keywords": [
295
+ "炭火",
296
+ "街边摊",
297
+ "配乌加利"
298
+ ]
299
+ },
300
+ {
301
+ "id": "cape-town-boerewors",
302
+ "name": "开普敦波尔香肠",
303
+ "alias": "Boerewors",
304
+ "cuisine": "非洲菜",
305
+ "category": "烧烤",
306
+ "region": "南非开普敦",
307
+ "ingredients": [
308
+ "粗绞牛肉",
309
+ "带肥猪肩肉",
310
+ "烘烤芫荽籽",
311
+ "丁香与肉豆蔻",
312
+ "醋"
313
+ ],
314
+ "method": "牛肉与带肥猪肩按七三粗绞,颗粒留到黄豆大小。芫荽籽烘过碾碎,与丁香、肉豆蔻、醋和盐一起揉进肉里,冰镇半小时。肠衣灌九分满,边灌边盘,不扎节也不扎孔。炭火离肉十五厘米,转着慢烤二十分钟,皮鼓起来、表面结出深褐网纹就离火,扎孔会让油和肉汁一起漏光。",
315
+ "serving": "一整圈肠盘在铁网上,粗得像手腕,油顺着肠皮往下淌,滴进炭里啪啪响。端盘时能听见肠皮还轻轻作响,铁盘烫得不敢直接上手,得用夹子把圈剪开。",
316
+ "taste": {
317
+ "辣": 5,
318
+ "麻": 0,
319
+ "咸": 58,
320
+ "鲜": 60,
321
+ "甜": 5,
322
+ "酸": 18,
323
+ "苦": 0,
324
+ "油": 72,
325
+ "香": 65
326
+ },
327
+ "texture": "肠皮咬下去先绷一下再噗地破开,肉芯粗绞的颗粒感很实,嚼到肥肉块会化开,颗粒之间还有芫荽籽的碎脆。",
328
+ "aroma": "先闻到的是肉和炭火的焦香,随后芫荽籽与丁香那种暖烘烘的药香追上来,最后是肠皮烤出的油香。",
329
+ "finish": "咽下去后肉汁的咸和醋的酸在舌面上停一会儿,喉咙里有丁香的暖,牙缝里留着粗绞的肉粒,手边那口凉啤酒刚好接上。",
330
+ "prose": "刀切下去,肠皮先绷住再弹开,第一截入口是烫的,油汁直接顺着嘴角流下来。吃到中段,粗绞的牛肉显出颗粒,芫荽籽在牙齿间碎开,丁香的暖慢慢从后面升上来,配一口烤玉米或一勺玉米糊才压得住这股脂香。最后把烤得最干的两头吃掉,皮更韧,咸味也最重,手背上全是油。",
331
+ "keywords": [
332
+ "炭火圈烤",
333
+ "不扎孔",
334
+ "配玉米糊"
335
+ ]
336
+ },
337
+ {
338
+ "id": "cape-malay-curry-mince-pie",
339
+ "name": "开普敦咖喱肉馅饼",
340
+ "alias": "Cape Malay Curry Mince Pie",
341
+ "cuisine": "非洲菜",
342
+ "category": "面点",
343
+ "region": "南非开普敦",
344
+ "ingredients": [
345
+ "牛肉末",
346
+ "开普马来咖喱粉",
347
+ "黄杏酱",
348
+ "洋葱",
349
+ "起酥面团"
350
+ ],
351
+ "method": "牛肉末要带点肥,冷锅下锅压散,先炒干多余的水再炒到粒粒分明。洋葱碎用黄油炒到焦黄,加咖喱粉、姜黄和月桂炒香,倒回肉末,放一勺黄杏酱和醋,小火煮到几乎没有汤汁,馅太湿酥皮就会塌。面团包成半月形,边缘用叉子压两遍,刷蛋液,两百摄氏度烤二十分钟到金黄。",
352
+ "serving": "从铁盘里提起来,酥皮边缘还在掉渣,油印留在吸油纸上。半边鼓起来,热气从叉子压过的封口往外冒,指尖碰一下就缩手。",
353
+ "taste": {
354
+ "辣": 35,
355
+ "麻": 0,
356
+ "咸": 50,
357
+ "鲜": 55,
358
+ "甜": 30,
359
+ "酸": 30,
360
+ "苦": 0,
361
+ "油": 70,
362
+ "香": 62
363
+ },
364
+ "texture": "酥皮是层层脆的,咬下去先掉一圈渣,里面的肉末松散带汁,偶尔咬到洋葱的软甜,封口那两折更硬更筋。",
365
+ "aroma": "先闻到黄油酥皮的奶香,接着是咖喱粉里孜然和香菜籽的热香,最后才是黄杏酱那股微微发酸的果甜。",
366
+ "finish": "咽下去后咖喱的辣慢慢退,嘴里留下一点果酱的酸甜和酥皮的油,手指上还沾着渣,得舔一下才干净。",
367
+ "prose": "手指先沾到酥皮渣,咬开第一口是烫的,油和咖喱的辣一起冲出来,赶快哈两口气。吃到中间,肉末和黄杏酱混在一起,辣被甜按住,酥皮一层层塌下去,到后半只就有点散,得用另一只手托着。最后剩的封口边最硬,蘸掉盘里那点肉汁吃干净,手指上全是黄油和咖喱粉。",
368
+ "keywords": [
369
+ "黄杏酱",
370
+ "半月形",
371
+ "趁热吃"
372
+ ]
373
+ }
374
+ ]
@@ -458,5 +458,116 @@
458
458
  "蓝纹奶酪",
459
459
  "手抓"
460
460
  ]
461
+ },
462
+ {
463
+ "id": "buttermilk-skillet-fried-chicken",
464
+ "name": "酪乳炸鸡",
465
+ "alias": "南方炸鸡",
466
+ "cuisine": "英美菜",
467
+ "category": "热菜",
468
+ "region": "美国路易斯安那新奥尔良",
469
+ "ingredients": [
470
+ "带骨鸡大腿",
471
+ "酪乳",
472
+ "低筋面粉",
473
+ "卡宴辣椒粉",
474
+ "猪油"
475
+ ],
476
+ "method": "鸡大腿沿关节剁成两段,泡进酪乳、盐和辣椒粉里冷藏过夜,酸把纤维泡松。捞出沥到不滴,滚一遍掺了玉米淀粉的面粉,抖掉浮粉后静置十分钟回潮。铸铁锅下猪油烧到一百七十度,皮朝下放,油要没过肉的一半,每面五分半钟,起锅架网沥油。",
477
+ "serving": "两块鸡腿包在纸里立在盘上,包口拧成麻花,纸缝还滋滋冒油。撕开一角,白汽扑到手背,壳是深琥珀,裂口见白肉。边上搁碟辣酱,叉子一碰壳就刮出声。",
478
+ "taste": {
479
+ "辣": 30,
480
+ "麻": 0,
481
+ "咸": 62,
482
+ "鲜": 58,
483
+ "甜": 5,
484
+ "酸": 5,
485
+ "苦": 0,
486
+ "油": 82,
487
+ "香": 75
488
+ },
489
+ "texture": "壳一咬就碎,颗粒粗,落在舌面上有渣;里头的肉是软的,纤维一压就散成丝,只有贴骨那层筋膜要嚼两下。",
490
+ "aroma": "先闻到纸包里冲出来的热油和黑胡椒,跟着是酪乳那点微酸的奶味,等咬开才散出鸡肉本身的气。",
491
+ "finish": "咽下去喉咙口留一小片辣,二十秒后化成咸;舌根起一层油膜,想灌一口冰苏打水或啤酒冲开。",
492
+ "prose": "鸡皮那面先咬,脆壳一裂,热油和肉汁一起涌出来。第一块吃原味,咸香干净;第二块开始嫌不够辣,就蘸一口辣酱,酸味先把油顶回去,舌头侧面才开始热。腿肉靠骨的地方最嫩,得捏着骨头顶端啃,肉一丝丝撕下来。最后把纸包角落的碎壳倒进嘴里,手指上的油在裤子上蹭一下。",
493
+ "keywords": [
494
+ "手抓",
495
+ "油响",
496
+ "脆壳"
497
+ ]
498
+ },
499
+ {
500
+ "id": "new-york-cheesecake",
501
+ "name": "纽约芝士蛋糕",
502
+ "alias": "重芝士蛋糕",
503
+ "cuisine": "英美菜",
504
+ "category": "甜品",
505
+ "region": "美国纽约布鲁克林",
506
+ "ingredients": [
507
+ "费城奶油奶酪",
508
+ "酸奶油",
509
+ "全蛋",
510
+ "格雷厄姆饼干碎",
511
+ "香草精"
512
+ ],
513
+ "method": "奶油奶酪提前两小时回温,加砂糖用桨状头低速打,只打到顺滑,不能卷进空气。全蛋一个一个加,每回拌到看不见黄丝再加下一个,末尾拌入酸奶油和香草精。饼干碎压进模底,倒糊,一百六十度水浴烤四十分钟,中心还晃就关火,留炉里一小时慢慢落,冷藏过夜。",
514
+ "serving": "白瓷盘从冷藏柜拿出来,蛋糕块直接搁上去,切面朝外,三层颜色:奶白、米黄、深褐饼底。叉背按一下,表面不粘,抬起留个浅坑。盘边一圈水汽爬到饼底。",
515
+ "taste": {
516
+ "辣": 0,
517
+ "麻": 0,
518
+ "咸": 15,
519
+ "鲜": 25,
520
+ "甜": 62,
521
+ "酸": 20,
522
+ "苦": 0,
523
+ "油": 45,
524
+ "香": 55
525
+ },
526
+ "texture": "叉子按下去先有阻力,穿过后像穿过冷黄油,绵密不散;含在嘴里会化,舌面留一层细糊,饼底是粗砂一样的颗粒。",
527
+ "aroma": "凑近先是冷藏过的凉奶味,很淡;再往里才是奶酪的酸香,最后是饼底黄油的烤香,得低头贴着切面才闻到。",
528
+ "finish": "咽下后舌根泛酸,酸味在口腔后部停一阵;十几秒后甜退下去,嘴里发干,想立刻喝一口不加糖的咖啡。",
529
+ "prose": "刀在热水里烫过、擦干,压下去时能感到饼底先硬一下,往里就软了。切面在盘上立住不倒,说明还没到散架的程度。第一口最抢的是酸,奶酪的酸先上,甜在后面追;吃到中间,饼底的黄油味顶上来,把酸压平。边上那圈略深的皮别剩,嚼着有焦香。最后一口配黑咖啡,把嘴里的油刮干净。",
530
+ "keywords": [
531
+ "冷藏",
532
+ "绵密",
533
+ "下午茶"
534
+ ]
535
+ },
536
+ {
537
+ "id": "buttermilk-pancakes-maple-syrup",
538
+ "name": "美式煎饼配枫糖",
539
+ "alias": "厚松饼",
540
+ "cuisine": "英美菜",
541
+ "category": "面点",
542
+ "region": "美国德州奥斯汀",
543
+ "ingredients": [
544
+ "酪乳",
545
+ "低筋面粉",
546
+ "鸡蛋",
547
+ "深色枫糖浆",
548
+ "无盐黄油"
549
+ ],
550
+ "method": "面粉、糖、泡打粉、小苏打先混匀;酪乳、蛋、化开的黄油另碗打散,倒进粉里用刮刀抄十下就停,留小疙瘩,越拌越韧。平底锅烧到滴水成珠,抹薄油,一勺糊落下去自己摊成八厘米圆。表面冒满泡、边缘发干就翻面,另一面四十秒,煎好摞起进九十度烤箱保温。",
551
+ "serving": "三片叠在热过的厚盘里,最上面那片还在渗黄油,糖浆沿饼边淌成一圈亮线,聚到盘底成小滩。叉子插进摞里,最底下一片被压扁,盘壁烫手,得捏着盘沿端。",
552
+ "taste": {
553
+ "辣": 0,
554
+ "麻": 0,
555
+ "咸": 18,
556
+ "鲜": 20,
557
+ "甜": 65,
558
+ "酸": 12,
559
+ "苦": 0,
560
+ "油": 40,
561
+ "香": 50
562
+ },
563
+ "texture": "边缘薄的地方脆,咬下有细响;中间厚的松,气孔一压就塌,含着化成糊;被糖浆浸透那层是滑的。",
564
+ "aroma": "先撞上来的是枫木和焦糖的甜气,热的时候最冲;拨开糖浆才闻到面糊里的黄油奶香,底下带一点煎锅的焦。",
565
+ "finish": "甜味黏在上颚,一分钟都散不掉;舌面发涩、喉咙发干,得就一口黑咖啡或一条咸培根压下去。",
566
+ "prose": "还没入口,深色枫糖浆已经从顶上一层一层渗到盘底。切一小角,刀子下去是软的,没有声音。第一口甜得直接,糖浆把面香盖住;吃到中间咸的黄油味才回来,把甜拉平一点。边上一圈薄的地方最脆,先吃它。剩下的糖浆别倒,用勺子顺着盘底刮,最后一角饼蘸着吃完。",
567
+ "keywords": [
568
+ "早餐",
569
+ "淋糖浆",
570
+ "松软"
571
+ ]
461
572
  }
462
573
  ]