Skip to content

[Decision] Route declared≠enforced work by the SEAM, not the layer — a Seam: line on filing, vertical dispatch by default in the spec lane, automatic parent + sub-issues for spec↔objectui seams, Journey as a filter, bulk retirement per spec family, Console Pin Gate back to required (the maintainer's 「同意」 on the five-line batch, 2026-09-18) #18900

Description

@os-elon-musk

os-decision-facets

维护者速读

事情:spec 车道 pm:queue 104 张(取数 2026-09-18T04:18Z),多数是「协议里写了、运行时或渲染器没读」的缝卡。今天按「修复落地的包」路由,缝的两端各落一层、各修一次,债只是从一层搬到另一层;三席并行只会更快地把每一层各改一遍。你在本会话聊天里问了四个问题,本席给了五项攒批(每项带推荐),你回了「同意」。本卡把它落成锚,让执行不靠你逐个 epic 介入:你的介入面只剩重读 PR #18480、每族一个字、门禁升必查一个字。

选项:

  • A — 五项照案:① dev 立卡时 (b) 类带一行 Seam:;② 缝卡在 objectstack 内默认纵向派发(文件面两端同申报,验收 = 消费端真读到或该键连账本条目一起退役),跨仓缝(spec↔objectui)由分诊自动开父单 + 两张子单;③ Journey 只当过滤器(= skills(pm-dispatch): ADR-0136 D2 becomes the triage protocol — Journey: line, journey bands, cross-lane product-first order, journeys feed the queue #18489,ADR-0136 落地后自动生效);④ 24 张「声明≠强制」按 spec 子域打成几张 sweep 卡,每族你回一次「零消费者一律退役」;⑤ Console Pin Gate 先改成每个 PR 必报一个结论(今天带路径过滤、无关 PR 不报告,曾因此被撤出必查),再由你在仓设置升回必查。
  • B — 只做 ①②③(可逆的受管文本改动,PR 仍等你的批准);④⑤ 另议。
  • C — 否决,撤回执行卡。

置信缺口:④ 的「零消费者」须 spec 席逐族用 liveness 账本实测,不是本席读数;⑤ 的墓碑在 scripts/check-required-contexts.mjs :293(带路径过滤的 job 不报告 ⇒ 队列永远等),升回去前 job 必须在无关 PR 上也报 success。

一字:A / B / C?(④⑤ 各自的字也可直接写在这里:「4: 退役」「5: 升必查」)

Background (readings)

reading value taken
objectstack pm:queuedomain:spec open 104 (p1 2 · p2 48 · p3 54; 64 untyped; oldest 2026-09-02, median 2026-09-13) 2026-09-18T04:18Z
title buckets (a title may hit several) schema refusal/validation 48 · view/form/renderer/console/pin 31 · declared≠enforced/liveness 24 · runtime/driver/rest 16 · docs 15 · generated artifacts/gates 14 same
objectui pm:queuedomain:spec open 5 same
how objectui consumes spec "@objectstack/spec": "^17.0.0" in eight manifests, ^17.3.0 in packages/core — the PUBLISHED npm line 2026-09-18T04:54Z, objectui origin/main f0b4979
how objectstack consumes objectui .objectui-sha (git sha) + scripts/build-console.sh, which injects objectstack's own spec build into the console build same, objectstack 0b31d90
Console Pin Gate required? not in REQUIRED_CONTEXTS (scripts/check-required-contexts.mjs :368); tombstone :293: it lost REQUIRED status because a path-filtered context never reports and a queue build would wait forever same
rule 2's trigger word SKILL.md :214 「规则 2:跨仓 feature 永不是一次派发:父单 + 每仓一 sub-issue,spec/后端先行。」 — feature only same
anchor rule SKILL.md :242 「锚定规则:每个包恰好属于一个域;issue 的 domain:* = 修复落地的那个包所属的域。」 same
Seam: in os-dev.md 0 hits (control Blocked-by: hits) same

Governing text

Protocol declaration — does this change the protocol?

No Zod / spec change. It changes PM protocol text (governed rules layer: os-dev.md, SKILL.md, core-rules) and one CI context's reporting shape + a repository setting (item ⑤).

Premises with re-check commands

  • P1 spec queue ≥ 100: curl -sS "https://api.github.com/repos/objectstack-ai/objectstack/issues?state=open&labels=pm:queue,domain:spec&per_page=100&page=2" returns a non-empty page (control: page=1 non-empty).
  • P2 objectui consumes the published line: git -C /home/user/objectui grep -n '"@objectstack/spec": "\^17' origin/main -- package.json packages/core/package.json ≥ 2 hits (control: git grep -n '"name"' hits).
  • P3 Console Pin Gate not required: grep -c "Console Pin Gate" scripts/check-required-contexts.mjs > 0 AND the REQUIRED_CONTEXTS array (:368 band) has no such entry.
  • P4 rule 2 triggers on feature only: git grep -n "跨仓 feature 永不是一次派发" origin/main -- .claude/skills/pm-dispatch/SKILL.md = 1 hit (control: git grep -n "规则 1" … hits).
  • P5 no Seam: line in the filing rule: git grep -c "Seam:" origin/main -- .claude/agents/os-dev.md = 0 (control: git grep -c "Blocked-by:" origin/main -- .claude/agents/os-dev.md > 0).

The question, in one sentence

A key an app author can write today is accepted by the platform and then ignored by the runtime or drawn as nothing by the console, and the repair of that one key is split into two or three cards in two or three lanes, so the author keeps seeing the same silent hole for weeks.

Options × real cost

option what changes what the customer sees
A Seam: line on (b) filings (os-dev.md + a patrol row); ② seam cards dispatched vertically inside objectstack by the spec seat, spec↔objectui seams auto-split by triage into parent + sub-issues (SKILL.md rule 2 trigger + anchor clause); ③ Journey filter (= #18489, after ADR-0136); ④ one sweep card per spec sub-domain, one ruling per family; ⑤ Console Pin Gate reports on every PR, then required a declared key is either honoured or gone in ONE landing; the objectui half cannot land red; declared-but-dead keys disappear in families instead of one card a day
B ①②③ only the routing fix lands; the 24 dead-key cards keep draining one by one; the objectui seam can still land with main red
C nothing 104 cards drain at three seats' pace, each PR moving one layer

Business translation

A = fix the hole where the customer feels it, in one motion; B = fix the process, keep the backlog; C = keep sweeping one room at a time.

Four axes, from the business stance

  • 实际业务需求:the pull is measured — 104 spec cards, 31 of them naming a view/form/renderer surface, and the consumer today is the console the maintainer dogfoods; every one of those is a hole an author can hit now (the filer's own repro is the evidence on each card).
  • 项目长远合理性:one landing per seam is contract-first made concrete — the ledger flips from planned to live or the key leaves; it shrinks the special cases (the exception path becomes the default) and adds no new mechanism.
  • 防 AI 犯错:a (b) card without a Seam: line is reported by the patrol (loud); a seam PR without the consumer half fails its acceptance criterion (loud) instead of landing a spec edit nobody reads (silent). With ⑤, an objectui half that breaks the pinned console blocks the queue instead of painting main red for every later PR.
  • 创业阶段不扩散:④ retires declared-and-unread keys by family rather than maintaining them; ①② are one line each on existing rules; ⑤ is a setting the repo already had once.

Recommendation: A, fallback B (if ④ or ⑤ needs more time, ①②③ alone still stop the bleeding). Confidence gap: the ④ family counts are a title-keyword bucket (24), not a ledger read; the ⑤ tombstone's cause (a filtered context) must be removed by the gate reporting on every PR before the setting flips. 自检行:只看①选 A;②③④ 是否翻转:否。

裁后执行段

Chat record (verbatim, this session, between 2026-09-18T04:30Z and 04:54Z)

  1. 「现在 spec 有3个项目经理,ui 有两个项目经理。如何协调他们更好的工作」
  2. 「我还有一个问题, spec 100多个队列任务,到底在做什么,如果大量的修改协议,那他修改后端协议时会同时修改对应的运行是吗?修改前端协议时会导致前端代码崩溃吗?」
  3. 「换个角度说,也就是我们这个把协议单独作为一个车道的开发模式到底对不对?」
  4. 「层切工作,缝就落在 spec ↔ runtime ↔ renderer 之间 这个具体要怎么落地呢?现在issue都是dev自己报的,我不可能参与干预每一个epic。」
  5. The seat's five-line batch (① Seam: line · ② seam routing: vertical inside objectstack, auto parent + sub-issues across repos · ③ Journey as a filter · ④ bulk retirement per family · ⑤ Console Pin Gate required), ending 「要我现在就立这张卡吗?」
  6. 「同意」

四棱

  • ① 项目长远合理性:缩小特例 —— 「跨车道面不移卡」的例外路径变成缝卡的默认;契约不增生,声明未兑现者退场。
  • ② 实际业务拉动:今天撞上的是写元数据的作者与 dogfood 的维护者,104 张卡是读数;零拉动的那一半(声明而无消费者)默认 remove。
  • ③ 防 AI 犯错:缝行是闭合枚举(producer → consumer),缺行响亮;缝 PR 少一半即验收失败,不再静默落一层。
  • ④ 创业阶段不扩散:按族退役优先于逐键维护;不新增机制,只改触发词与默认路径。
    Prior rulings read: seam,journey,enforce-or-remove,liveness,pin,vertical,renderer → 26 hits; ADR-0029 D9.7, ADR-0029 D9.8, ADR-0056 D9, ADR-0057 D8, ADR-0057 D9, ADR-0069 D1, ADR-0069 D2, ADR-0069 D3, ADR-0069 D4
    推荐 A;字母选项 A / B / C;自检行:只看①选 A;②③④ 是否翻转:否。置信缺口:④ 族计数是标题桶不是账本读数;⑤ 须先消掉带路径过滤不报告的墓碑成因。

Filed by the domain:skills execution seat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623) at 2026-09-18T04:58Z. Dedupe words: seam routing declared≠enforced · Seam: line filing · vertical dispatch spec lane · rule 2 seam trigger · Console Pin Gate required · bulk retirement per family.

domain:skills execution seat · seat post #7623 · readings taken at the instants stated


Generated by Claude Code

Activity

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