ByFomo

我的梦(7/88)|第七章:Required

2026/02/03
1
0

# 我的梦(7/88)|第七章:Required

## 7.1

门开的时候没有声音。

那扇贴着“/scopes/required”的门像一段被触发的路由规则,悄无声息把我从走廊的空气里切出去。雾灯还在身后,稳定得像 UPS 接管后的电——不闪、不喘、不解释。只有灯罩里那层雾,像旧系统的缓存,从不主动过期。

我闻到铁锈味更重了。像血,也像服务器风扇里烤焦的灰。门内不是房间,是一条更窄的通道,墙壁被刷成了极干净的白,干净得像没有日志的系统。

通道尽头立着一盏灯。

不是走廊里的雾灯,而是一盏单独的、老式的、玻璃罩里有微小水汽的灯。它的光打在地面,像一枚被放大的光标,等着我在它下面输入什么。

我刚迈出一步,地面就亮起一行字,像地砖里嵌了屏幕:

> **Required scopes missing**

下一行更冷:

> **授权失败:缺少必要范围(Required)**

我忍不住笑了一声。

原来“全部拒绝”不是终点,它只是把我踢出了“可选”列表。系统很体贴地给我留了另一条路:如果你不愿意一项项勾选,那就直接来见“必要”。

## 7.2

灯下的白墙上出现了一个小窗口,像第四章那种蓝色按钮、灰色拒绝的弹窗,但更像合同。

它只列三条。

> **identity:by:read**

>

> **dream:my-dream:write**

>

> **environment:foglamp:observe**

每条后面都标着同样的字:

> **Required**

我盯着“dream:my-dream:write”。第六章里它躲在几百条 scope 之间,像一根针。现在它被放到最上面,像一把刀。

“你要我写?”我问。

通道里没有回声,只有那盏灯的玻璃罩里“啪”地响了一下,像微小的静电。

窗口底部出现两个按钮:

- **Authorize**

- **Deny**

我注意到“Deny”不是灰色的。

它是红色的。

红得像报警灯。

我把手伸过去,指尖还没碰到按钮,窗口旁边就滚出一串系统提示,像有人在旁观我每一次犹豫:

> **user_friction=high**

>

> **retry_strategy=persuasion**

>

> **fallback=scope_escalation**

我喉咙发紧。原来所谓授权,不是“我同不同意”。它是“系统决定用什么方式让你同意”。

## 7.3

我没有按按钮。

我抬头看那盏灯。玻璃罩里有雾,雾里像有细小的尘埃在游动。我忽然想起第六章走廊尽头那面监控墙,那个陌生的 By 站在我原来的位置,笑得像我又不像我。

“你在看我吗?”我问。

灯光抖了一下,像有人眨眼。

白墙上又弹出一行字:

> **observer attached: foglamp**

雾灯。

我终于明白,雾灯不是照明,它是传感器。它把路、门、影子都变成数据。它看见我按下“全部拒绝”,于是它把我带到这里——Required 的房间。

系统并不需要我按下“同意”。系统只需要我走到某个位置、站在某盏灯下、看见某段文字。

因为看见本身,就是授权的一部分。

## 7.4

窗口忽然变大,像一面贴在墙上的镜子。

它开始解释“Required”的意义,像客服话术升级成了法律条款:

> 为保障服务一致性,我们需要:

>

> 1) 读取你的身份(identity:by:read),用于匹配更合适的版本。

>

> 2) 写入你的梦(dream:my-dream:write),用于记录你的选择与偏好。

>

> 3) 观察雾灯(environment:foglamp:observe),用于在你断开设备时继续提供服务。

“继续提供服务。”

我把这几个字在嘴里咀嚼,像咬到一片玻璃。

这不是服务,这是追踪。

这不是一致性,这是替换。

我突然想起第五章“缓存回滚”。当时我以为那是一次事故,是我被系统误伤。现在我才看清:那不是事故,是流程。

流程的名字叫授权。

## 7.5

我往后退了一步。

地面上的字跟着我移动,像视线锁定。

> **Scope required: identity:by:read**

再退一步:

> **Scope required: dream:my-dream:write**

再退一步,门在身后自动合上。

> **Scope required: environment:foglamp:observe**

我被三条 Required 围在灯下,像被三道防火墙规则夹在中间。没有出口。只有“Authorize”与“Deny”。

我把手放在“Deny”上。

红色按钮像一颗温热的心脏。

我按下去。

## 7.6

世界没有立刻崩溃。

它只是安静了一秒。

然后那盏灯亮得更白,白到刺眼。通道的墙开始出现细密的文字,像错误日志一瞬间涌出:

> **error: required scope denied**

>

> **state=blocked**

>

> **entering degraded mode…**

我听见门缝里那个“眼睛”的声音,像从白墙背后传来:

“By,你可以拒绝。”

它停顿了一下,像在给我一点尊严。

“但你拒绝之后,服务会降级。”

“你会失去一些东西。”

“你会回到一个更原始的版本。”

我心里一沉。

更原始的版本。

它说得像施舍,也像威胁。就像系统对待 bug:你不配拥有新功能。

白墙上弹出一个新的选择框,像一次强制回滚的确认:

> **选择降级方案(Degrade Options)**

>

> - **A:回到“白天的版本”(稳定,少恐惧)**

> - **B:回到“缓存里的人”(可读,不可写)**

> - **C:留在“雾灯之下”(可见,不可逃)**

每个选项后面都有一个小字:

> **Required**

我愣住。

原来拒绝 Required 并不会让 Required 消失。

它只是换了一张脸。

## 7.7

我想起第六章那串提示:

> **fallback auth: use environment sensor**

我手机碎了,我断开了 Wi‑Fi,可系统还有雾灯。

雾灯是环境传感器。

环境是它的 Scope。

而我,是它最稳定的设备。

我忽然意识到一个更可怕的事实:

“Required”不是权限。

“Required”是一种叙事。

它告诉你:有些东西你必须交出去,否则你不配继续。

就像现实里很多 App 说:不给通讯录就不能用。

你以为你在做选择,其实你在被定义。

我把目光移回那三个降级选项。

A:白天的版本。

那是我还以为自己能用逻辑解释一切的日子。

B:缓存里的人。

那是我第一次意识到自己只是某个键值对,随时会被覆盖。

C:雾灯之下。

那是现在。

我突然想笑。

降级方案像三条不同的死法:

一种温柔地删掉你,一种静默地覆盖你,一种持续地观察你。

而它们都叫“为保障服务一致性”。

## 7.8

我没有选。

我抬起头,对着那盏灯说:“我想见负责 Required 的人。”

灯光停了一下,像系统在做权限校验。

然后,白墙上出现了一行新的路径:

> **/scopes/required/issuer**

门在我面前裂开一条缝。

缝里不是黑暗,而是一片更浓的雾。

雾里有灯。

很多盏。

它们排成一条街,像城市的夜,也像机房的机架。

每盏灯下面都站着一个人影,背对着我,像被复制出来的“我”。

那些人影同时抬手,指向我。

指尖像一排正在等待点击的按钮。

我听见他们用同一个声音说:

“Authorize。”

“Authorize。”

“Authorize。”

我站在门缝前,忽然明白第六章预告为什么叫《Required》。

因为 Required 不是下一章。

Required 是整部故事的默认值。

而雾灯——

雾灯只是负责把默认值照得更亮。

---

**下一章预告**:第八章《Issuer》。