chain-selective-access

Chain · 选择性访问 —— 谁能看到什么,在签发时冻结

上级:requirements-to-design

状态: 最深的一条链路 —— 设计已定稿,测试最重。

L0 · 愿景

introduction —— 模式即角色:四个应用共享同一个语料库;ACL 是能否触达的硬墙角色是哪些内容被呈现出来的软框架boundaries —— 一个"面向选择性互动的思想领袖式过滤器",既不是完全公开广播,也不是谁都能预约。design-principles —— "服务那些已经喜爱它的人;保留一些访问摩擦"。

L1 · 承诺

主理人按受众逐一决定,究竟存在哪一个切片;访客的规则在邀请签发的那一刻就被固定下来,此后只能收窄,绝不能放宽。

L2 · 需求(旅程与功能)

主理人的邀请码管理旅程,以及访客的门禁旅程(入口:Code / BYOAI / Request access),外加配额;管理界面呈现 Codes 与 Access Requests;门禁页面 /gate

L3 · 设计决策

已定稿的三层设计(capability-acl-hierarchy,决策锁定于 2026-06-23):纯 AND 式收窄 global(live) ∧ role(frozen) ∧ ¬code-deny(frozen)acl-and-quota-granularity);三态覆写已被否决,改用稀疏拒绝表(一个邀请码只能做减法);冻结/实时的不对称性(role-snapshot-frozen);AccessCode 即邀请,只有一张表,不设并行概念;身份识别经由中立的 _metatrusted-identity-via-meta);BYOAI 的封装隔离(byoai-envelopebyoai-browser-vault)。

L4 · 工程产物

数据表 access_codes(assumed_role_id、prompt_id / inline_prompt、slug、microsite_id、limit_per_period)、code_capability_denialscode_skill_denialscode_corpus_denialscode_memberscapability_settingsroles/role_skills/role_mcp_servers/role_corpus_urisembeds(code_id UNIQUE、key_id / public_key);backend/internal/conversation/usecase/visitor_role_snapshot.go;面向 ACL=always 能力的 RoleSnapshot.deniedCapabilities;以及配额系统。

L5 · 验证

仓库中最重的一片 e2e 测试:acl-capability-matrixacl-skill-matrixacl-freeze-isolationvisitor-chat-permissions-denygate-access —— 外加时序上的讲究(ACL 在会话建立时通过 ErrHidden 生效;调用时只做 monitor 与密钥扫描)。

状态与缺口

全局层已落地;角色/邀请码拒绝按定稿设计实现;corpus-glob ACL 现已落地(AllowsCorpusEntry 在每次读取时强制执行;raw://** 一律硬拒绝;按邀请码收窄语料走 code_corpus_denials,2026-07-16 6395374b0);按邀请码定制的 prompt 已落地(access_codes.prompt_idinline_promptcodePromptBody 被冻结进快照,在 visitor_chat_prompt.go 中叠加于角色人格之后)。2026-08-30 那次核对之后:系统派生的邀请码随机后缀从 16 bit 加到 64 bit(2026-09-01 1ca9d9564access/entity/code_derive.go,由一次渗透测试推动);暴露在第三方站上的邀请码走 embed-credential-never-carries-the-code(2026-09-01 2098975db);每张邀请码自带落地路径 /c/<slug>(2026-09-06 4e383c2a7 + c6c54ce88DeriveSlug,migration 2026-09-06-access-code-slug.sql);邀请码的字符串可以轮换以应对泄露,codes.rotateRotateCode 并清掉该码的会话(2026-09-07 505b3fc4f + 6ed1759bbaccess/usecase/codes.go:113);访客页上输入新码会切换会话、无效码落到 /gate(2026-09-06 230a17025)。

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →

chain-selective-access