Skip to content

docs(collaboration): record attribution and information flow as an unowned gap - #88

Merged
wefio merged 1 commit into
mainfrom
docs/attribution-information-flow-gap
Oct 10, 2026
Merged

wefio merged 1 commit into
mainfrom
docs/attribution-information-flow-gap

Conversation

@wefio

@wefio wefio commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

变更描述

What(改了什么):协作清单文档 docs/design/protocol-governed-collaboration.md 新增一行部件「归属与信息流」和一个空缺 8,中文语对同步同样的行、空缺与交叉引用。

Why(为什么改 / 解决什么问题):这份清单本来就在列「一件任务不能缺的那几样」,也已经有两行在说「机制完整、责任没有归属」(拥有与时间、恢复与重放的自举部分)。但「没人管的某一块由谁负责」以及「一块活的理由放在哪里」这两件事,既不是一行部件、也不是一个空缺,因此既不会被读到,也不会被关掉——它只存在于被交办者的上下文里。这次把这份缺失写下来:谁写下了这一块、谁承担「去发现」、交办要不要带走为什么。按用户的说法,这是「Context, not Control」——让身处上下游的人具备发现遗漏的上下文,而不是靠上级检查;遗漏在变成大炸弹之前就被直说。

明确不做的事:这是记录一份缺失,不是新增一条规则。 文档自己写着「它是一份索引,不是第二份规格」,而 skills/doc-maintenance/SKILL.md 的元规则要求规则变更必须在其归属记录里写明改了什么、替代什么、为什么。所以新增行的 State 写的是「责任没有归属」、Owner 写的是「尚无归属——见空缺 8」,而不是一条被悄悄接受的规范。要让它具备约束力,需要一份 decision record 作为归属方——空缺 8 里「把那个机制点名」指的就是这件事。

Changes(关键改动点,按文件或模块列出):

  • docs/design/protocol-governed-collaboration.md
    • 表格新增行 Attribution and information flow,位置在 Handoff 之后:State = 条目与认领各有归因,但「发现无人认领的那块」与「把一块活的理由带下去」这两份责任没有归属;Owner = no owner yet - see gap 8。
    • 新增空缺 8:点名概念 context, not control 与空缺 1 已有的 orphan reaper / restart responsibility,并写明这条原则被写给的三种范围(agent→agent、人→agent、人类团队)中,只有第一种有这个大类可以挂靠的机制。
    • 两处交叉引用同步:「没有任何单独一部分能完成任务」的部件枚举加入 attribution;「Rows 1, 4, 5, 6, 7 and 8 are gaps with no owner yet」。
  • docs/design/protocol-governed-collaboration.zh-CN.md:同一行、同一空缺、同样的交叉引用。

未验证项

Not verified(没验证什么):

  • 只跑了 documentation 路由的阻塞集合(narrow)。 改动是纯文档,路由判定为 documentation,因此没跑 test:product、mutation:teeth、evals/**。这正是 --narrow 的语义(「被单一非共享路由干净拥有」),不是跳过了本该跑的东西。
  • CI 里的 Windows chaos tests 是 SKIPPED,不是通过。 其余检查全部 SUCCESS,但这个 job 在本 PR 上没有跑过,因此它覆盖的行为在本 PR 上是未验证的,而不是被认为没问题。
  • npm run verify:static 与路由集合不是同一件事:前者在专用 worktree 内完整跑过(exit 0,见完成检查项),但它测的是 1f3c24d3 这棵树;本 PR 之后若再改动,这份证据需要重跑。
  • 一个尚未解释的差异,带复现步骤留着:在全新的 git worktree 里连续跑同一条 npm run agent:verify -- docs/design/protocol-governed-collaboration.md docs/design/protocol-governed-collaboration.zh-CN.md,第 1 次 npm run check 失败(收据无 diagnostics)、第 2 次 npm run rtm:check 退出 1(收据无 diagnostics)、第 3 次 8 项阻塞检查全绿、收据 decision 为 verified。同一条 npm run rtm:check 单独运行退出 0,在共享工作树里也通过。本 PR 没有定位原因,也不把它记成「flaky」——按 docs/postmortem/0004-flaky-was-a-clock-boundary.md,一个不能复现的失败要么带着复现尝试与发生率记录,要么留着,不能用标签关掉一个没人回答的问题。怀疑方向(未验证):新 worktree 的生成物未就绪,以及 rtm:check 读上一次验证记录时的时序,但两者都只是怀疑,没有证据。

完成检查项

本地质量检查

  • npm run verify:static 通过(exit 0,detached 运行,snapshot 1f3c24d3):build / package:check / check / check:tests / mutation:anchors / check:lock / lint / format:check / docs:check / agent:context:check / complexity:gate / verify:packages / glossary:check / check:policy-words / rtm:check 全部通过
  • npm run test:product —— 不适用:按改动路由跑的是
    npm run agent:verify -- docs/design/protocol-governed-collaboration.md docs/design/protocol-governed-collaboration.zh-CN.md,
    路由为 documentation,其阻塞集合是 check / docs:check / format:check / glossary:check / lint / package:check / rtm:check / node-test:documentation(8/8 通过)。纯文档改动不进 test:product 的路由。
  • 未改依赖或 lockfile —— 不适用(git show --stat 只有 2 个 .md)。
  • 未改子包(dsh/dsh-nmg 等)—— 不适用。
  • 文档改动跑过 npm run docs:check(通过);改动遵循 doc-maintenance 规范:更新既有归属方而非新建摘要、一份规则一个家、双语语对同步、未在正文里叙写变更史。
  • ## 未验证项 已填写(含一个未复现的检查差异与复现步骤)。
  • 非平凡改动已携带决策记录 —— 本改动刻意不是规则变更,因此不产生 decision record;理由写在 Why 与文档空缺 8 里。
  • 新代码方法圈复杂度不超阈值 —— 不适用(无代码改动;complexity:gate 在 verify:static 内照跑)。
  • 未提交可再生产物:git show --stat HEAD 只有 docs/design/*.md 两个文件。

RCP(Repository Control Plane)

  • 首个实质写入前已在 repo-development 黑板登记 in-flight goal:entry 01a125d3-caab-7754-9a01-df265b280530(kind=goal,goal/approach/scope 三项)。诚实标注:登记发生在第一次文件写入之后,不是在写入之前——这一点没有按 skill 要求的时序执行。
  • 改动路由的 reconcile 已通过并写入证据:npm run agent:verify -- <两个路径> → 收据
    agent-verify-narrow-documentation,decision verified,
    证据 .nmg/verification/latest.json(在专用 worktree NodeMemoryGraph-attribution-gap 内,tree 只含本 PR 的两个文件)。
  • 只提交本 PR 拥有的文件;未吞并行 Agent 的暂存/工作树改动。共享工作树 C:\Documents\GitHub\NodeMemoryGraph 当时有他人未跟踪的
    docs/experiments/retrieval-quality/*.html、一份他人笔记与 package-lock.json 的改动——这些都没有进入本 PR,这也是本改动改用专用 worktree 提交的原因(共享工作树里第一次 agent:verify 的收据 decision 正是因此为 failed,diagnostics 是
    one or more changed files fall outside declared scope,而 8 项检查本身全绿)。
  • CI 全绿是用 RCP 观察确认的:node bin/nmg-rcp.mjs forge-status --pr 88 →
    Static and package contracts :: COMPLETED SUCCESS、
    Product tests and coverage :: COMPLETED SUCCESS、
    Research characterization (non-blocking) :: COMPLETED SUCCESS、
    Node 22 compatibility :: COMPLETED SUCCESS、
    All checks passed :: COMPLETED SUCCESS、CodeFactor :: COMPLETED SUCCESS,
    Windows chaos tests :: COMPLETED SKIPPED(见 未验证项)。观察,不是合并决定。

CI 完成确认

  • nmg-rcp forge-status --pr 88 的 All checks passed 为 COMPLETED SUCCESS
  • CodeFactor 通过(COMPLETED SUCCESS)
  • Static job 通过(Static and package contracts :: COMPLETED SUCCESS;含 verify:static 全部子检查 + Dependency audit,本 PR 未改依赖)

…owned gap

The umbrella inventory lists the parts a task needs. Who is responsible for a
part nobody is working on, and where the reason a part exists is carried, were
neither a part nor a gap: attribution exists per entry and per claim, the two
responsibilities did not exist anywhere.

Both are now recorded. A table row, "Attribution and information flow", whose
state says the responsibility is unassigned and whose owner column points at gap
8; and gap 8, which names the concepts - context, not control, and the orphan
reaper / restart responsibility already named in gap 1 - and states the three
scopes the principle is asserted for (one agent handing to another, a human
directing an agent, a human team), of which only the first has machinery this
umbrella could attach it to.

This records an absence, not a rule. Binding it needs a decision record as its
owner, which is what naming that machinery in gap 8 would produce.

The bilingual pair carries the same row, gap and cross-references.

Verified through the routed blocking set for the documentation route - check,
docs:check, format:check, glossary:check, lint, package:check, rtm:check and
node-test:documentation all passed, and the RCP receipt decision is "verified".
@wefio
wefio marked this pull request as ready for review October 10, 2026 12:54
@wefio
wefio merged commit e3f35d8 into main Oct 10, 2026
7 checks passed
@wefio
wefio deleted the docs/attribution-information-flow-gap branch October 10, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant