FirstMate:助手工作组、持久证据与交付授权
FirstMate 合并授权源码:绑定身份的凭据不等于合并许可
阅读授权分类、六行凭据持久化和身份核对消费,并理解隔离 JavaScript 教学模型没有覆盖的部分。
你将学会
- 从辅助库声明的职责边界开始
- 持久化把凭据绑定到具体请求
- 清理也不能误删后来替换的凭据
开始前需要
- 理解 Git 工作树与拉取请求
- 理解终端助手和凭据权限范围
定义交付约定,检查状态与授权证据,并避免宣称未经验证的运行保证。
先看结论
- 授权分类解析器不是完整合并门禁。
- 凭据把历史分类绑定到规范请求身份。
- 清理时同样需要避免误删替代记录。
从辅助库声明的职责边界开始
bin/fm-merge-authority-lib.sh 的文件头明确表示,解析器本身不授予任何权限。真正的门禁归合并路径负责,在平台接受请求之后才持久化授权分类。六行记录依次包含格式标记、平台类型、主机、仓库路径、请求编号和授权分类。
解析器区分 attended、yolo 与 away-grant。没有离开记录时归为 attended,记录存在但不可读时失败;记录有效时,再由任务元数据中的 yolo 设置或精确任务授权决定分类。不能把 attended 解读成绕过现场检查或用户指令的通行证。
持久化把凭据绑定到具体请求
持久化函数先验证任务、状态目录和当前请求身份,再获取记录锁,在状态目录创建私有临时文件,写入六行、校验文件并替换目标。它调用的辅助函数还实施额外文件约束,这些机制没有被我们的独立教学模型实现。
record_matches 会拒绝错误格式、不支持的授权值、身份不匹配和多余行。读取函数默认归类为 external,只在记录锁内消费匹配凭据。这样,后续轮询不会根据当时可能已经变更的离开策略,重新编造历史合并授权。
清理也不能误删后来替换的凭据
remove_if_matches 在删除前比较规范请求身份、授权分类和记录文件身份。仅比较任务名称,可能误删读取之后被其他过程更新的记录。这项源码级保护说明,清理属于正确性设计,而不只是执行完任务后的杂务。
配套 JavaScript 模型用合成字符串测试六行解析和精确请求匹配,刻意不包含 Shell 导入、文件权限、锁、平台调用及授权解析。测试通过只能说明教学模型的不变量成立,既不代表执行了上游 Shell,也不证明生产环境并发合并安全。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
追踪辅助函数前先阅读文件头。
- 2
分别检查解析、持久化、读取和清理。
- 3
用合成数据测试畸形及错配凭据。
- 4
区分模型、Shell 和真实平台的覆盖范围。
可复制示例
// 仅为教学模型,不是上游合并门禁。
const sameRequest = (a, b) =>
["provider", "host", "path", "number"]
.every(key => a[key] === b[key]);
// 文件身份和锁检查是另外的职责。常见问题
有效凭据会授权发起一次新合并吗?
不会。它记录某个已接受请求的分类,真实合并门禁还有其他检查。
本次执行了上游合并脚本吗?
没有。只执行了独立 JavaScript 教学模型,不涉及文件系统或平台操作。
资料来源
- FirstMate / bin/fm-merge-authority-lib.sh来源核查 2026-09-14
- FirstMate / docs/architecture.md来源核查 2026-09-14