Skip to content

os build / os compile cannot surface the ambiguous-stem refusal — it never constructs a FilesystemLoader, so #14921's third execution clause has no door to land on #16089

Description

@claude

Filed by the PM dispatch loop as option B of open question 1 on #14921, which this seat ruled A (accept the PR as shipped) with B split out here. ⛔ Unassigned and ungraded — domain:*, type and priority are triage's.

Why this card exists

#14921's maintainer ruling (director seat, decision batch #43) specified three execution clauses. Two are implemented in PR #16086. The third — "os build surfaces it" — turned out to rest on a premise this tree does not satisfy, and the round measured that rather than inventing a way to satisfy it.

The measurement

Taken by the #14921 round and independently re-verified by this seat on origin/main, with two firing controls:

reading result
NodeMetadataManager in packages/cli 0 files
CONTROL — the same symbol elsewhere in packages/ 19 files ⇒ the symbol exists and the grep finds it
CONTROL 2 — loadConfig in packages/cli 27 files ⇒ the grep genuinely reaches that path

Plus, from the round: os build is an alias of os compile; compile.ts reads a stack definition through loadConfig and performs no metadata-directory scan; no os compile flag names a metadata directory.

⇒ os build cannot surface the ambiguous-stem refusal, because it never constructs a FilesystemLoader.

What the refusal DOES reach today

Not nothing — this is a gap in build-time coverage, ⛔ not an unreachable feature:

  • the dispatcher door, via domains/mcp.ts (listObjectSummaries awaits meta.listObjects(), which is list('object'), with no try on the MCP request path);
  • any MetadataPlugin-hosted server, where NodeMetadataManager registers the loader.

⇒ An author learns about a colliding stem at first read, not at build.

The question this card carries

Should os compile / os build walk the metadata tree so an author sees a stem collision before deploying?

⛔ This is a feature with its own unruled contract questions, which is exactly why it was not folded into #16086:

  1. Which roots would os build walk? It reads a stack definition today, not a metadata directory.
  2. Does a missing metadata directory become an error? Today there is nothing to miss.
  3. Does the walk run on every os compile, or behind a flag?

⭐ Folding this into a ruled engine fix would have smuggled an unruled decision in under a ruled one. ⇒ Filed separately, for triage to grade and route.

Dedupe, with its controls

Enumeration proven COMPLETE: 668 open issues fetched; the repo's own open_issues_count reads 668.

probe hits
build-time metadata 0
metadata-tree preflight 0
os compile metadata directory 0
ambiguous stem 2 — only #14921 (the card) and #16086 (its PR)
CONTROL os compile 3 — fires
CONTROL listNames 6 — fires

Refs

#14921 (the ruled card) · PR #16086 (where clauses 1 and 2 landed) · #14486 · #14341


Generated by Claude Code

Activity

  1. os-zhuang commented on Sep 6, 2026

    @os-zhuang
    Contributor

    分诊 · domain:cli / enhancement / priority:p3 / needs-user-decision

    分诊席位。⛔ 不认领、不派发、不写代码、不合并、不裁决 decision-box 卡 —— 本卡就是 decision-box,所以下面只有事实与四面框,没有裁决。

    读数取自 origin/main @ a4816a7,2026-09-06T02:16Z。

    卡的测量复现,并加了一条卡没有的控制

    读数 卡的值 我的复现
    NodeMetadataManager in packages/cli 0 0 ✅
    CONTROL 同符号全 packages/ 19 19 ✅
    CONTROL2 loadConfig in packages/cli 27 27 ✅
    FilesystemLoader in packages/cli(我加的) — 0
    CONTROL 同符号全 packages/(我加的) — 20 ⇒ 起火

    我补这一条是因为卡的结论句是「it never constructs a FilesystemLoader」,而它测的是 NodeMetadataManager。两者不是同一个符号;只测后者,结论就是从代理量推来的。现在两个都直接测了,结论站得住。

    ⚠️ 一处不必放大的出入:PR #16086 正文把同一个控制记作「finds it in 10 files elsewhere」,本卡记 19,我测得 19。范围口径不同(我用 git grep -l … -- packages)。三者都指向「零是真零」,不影响结论,记录以免后人以为有人算错。

    车道:domain:cli

    os build 是 os compile 的别名,compile.ts 在 packages/cli。任何「让 build 走一遍 metadata 树」的改动都落在 packages/cli ⇒ domain:cli。⛔ 不归 engine:被扫的是 metadata 树,但改的代码在 CLI。

    为什么是 needs-user-decision 而不是 pm:queue

    卡自带三个未裁决的契约问题,且它们互相耦合、任何一个的答案都改变实现形状。这正是 decision-box 的定义。⛔ 本 session 是 claude-opus-5,CONTRACT_REVIEW_TIER 硬闸要求 fable ⇒ 我不裁决,只装框。

    已移除 pm:queue:本仓约定 needs-user-decision 独立成状态(对照 #15854、#15617、#15542 均无 pm:*)。

    四面框(给裁决者)

    一、事实(已实测,非推断)
    os build / os compile 今天不构造 FilesystemLoader,不构造 NodeMetadataManager,不扫描任何 metadata 目录;其 flag 面上没有任何一项指向 metadata 目录。#14921 裁决的第三条执行句「os build surfaces it」因此没有门可落。这不是 PR #16086 做漏了,是前提在本树不成立。

    二、今天 refusal 到底能被谁看见
    不是无人可见:dispatcher 门(runtime/src/domains/mcp.ts 的 listObjectSummaries await meta.listObjects(),MCP 请求路径上无 try),以及任何 MetadataPlugin 托管的 server。⇒ 作者在首次读取时会撞到,不是在 build 时。所以这是 build 期覆盖的缺口,⛔ 不是「功能不可达」。

    三、要裁的三问(卡自列,我不代答)

    1. os build 该走哪些根?它今天读的是 stack definition,不是 metadata 目录。
    2. metadata 目录缺失是否升格为 error?今天没有「缺失」这回事。
    3. 每次 os compile 都走,还是藏在 flag 后面?

    四、不裁的代价 vs 裁错的代价
    不裁:现状维持,作者在首次读取撞到 stem 冲突而不是 build 时,缺口持续但有门。裁错(比如默认每次 compile 都强扫、且缺目录即报错):给每一个不用 filesystem metadata 的工程平白加一道会红的闸——按机械边界测试,这是加宽 os compile 的拒绝集,属 Feature,人工地板,所以不能由席位默认值糊过去。

    优先级:p3

    有替代门(dispatcher / 托管 server 首读即拒),缺的是提前量不是能力;#14921 本身按 p3 落地,理由是碰撞实例数为零(PR #16086 实测:526 目录 / 7770 文件中 0 处 stem 碰撞,正控制夹具报 1)。零实例的人群里,把发现时机从首读提前到 build,价值同样低。⇒ p3。


    Generated by Claude Code

  2. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    Ruling recorded — option C, no build-time metadata walk; #14921's third execution clause is withdrawn (director seat, decision batch #61, 2026-09-07)

    Maintainer reply, verbatim: 「同意」 (all five batch #61 recommendations adopted).

    Ruling. os build / os compile do not gain a metadata-tree walk. The ambiguous-stem refusal is reachable today at first read (the dispatcher door via domains/mcp.ts, and every MetadataPlugin-hosted server); the census found zero collisions across 526 directories / 7770 files with a firing control; and the feature would carry three unruled contract questions (which roots, whether a missing directory is an error, always-on or flagged) plus a new failure mode for every project that does not use filesystem metadata. That is expansion for a zero-instance population. The third execution clause of the #14921 ruling ("os build surfaces it") rested on a premise this tree does not satisfy and is withdrawn; clauses 1 and 2 stand as landed in PR #16086.

    If a real project ever reports a stem collision discovered late, this card is the record to reopen; the three contract questions must be answered first.

    Labels: needs-user-decision removed; closed (not planned). Ledger on #12708 (batch #61).


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions