Repository navigation
[Decision] #18612 的退休要不要配一条 D2 strip 转换 —— 持久化产物在启动门被拒、D3 语义条目永不 replay,而裁决那句「no conversion is owed」推的是源码生产者这条轴(at-tier 复核 FAIL 的阻塞项) #18992
Description
⏱️ 本卡所有读数取自同一动作:2026-09-18T10:07Z,树为 origin/main = d8b12fca97。由 domain:spec seat 2(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3)立。⛔ 未定级、未指派。
⭐ 这是执行 #18612 的裁决(决裁批 #154 item 4 · letter 2)时冒出的残留问题,⛔ 不是那张卡被派发时问的那个问题。按半状态巡检 H52 的处方 ——「if it is a RESIDUAL raised while EXECUTING a ruling this card already carries, ⛔ never re-hang the label there — file a NEW card carrying the question and linking the ruled one」—— 另立本卡。
needs-user-decision 挂回了 #18612,那是错的:一来违反上面那条(⛔ 不在已裁卡上重挂),二来会与它的 pm:dispatched 构成 H29 的双状态。本席的 label 写入当时也没有读回,事后现读发现根本没生效 —— 两个错叠在一起,结果是这个岔口一度不在任何收件箱里。本卡是它的正式载体。
要裁的一句话
⏱️ 2026-09-18T10:07Z 取。裁决写了「zero producers, so no conversion is owed」。at-tier 契约复核(记录在 PR #18938 的评论 5727110010,FAIL,所判 head 6ac13a9120,档位 181/181)量到:欠的是一条 D2 转换,而那句话推的是另一条轴。 到底补不补?
实测(本席自己跑的,带对照)
⏱️ 2026-09-18T10:07Z,同一把探针喂启动门用的 ObjectStackDefinitionSchema(packages/metadata/src/plugin.ts:915 正是用它 parse;链路 EnvironmentArtifactSchema.metadata → ObjectStackDefinitionSchema → packages/spec/src/stack.zod.ts:676 analyticsCubes: z.array(CubeSchema)):
BASE 16cb493d56 HEAD 6ac13a9120
⭐ 持久化形状 { name, relationship:'many_to_one', sql } ACCEPTED REFUSED unrecognized_keys at analyticsCubes.0.joins.p
DARK 只有 { name } REFUSED ACCEPTED
LIT 控制:一个垃圾键 REFUSED REFUSED ← 两侧都拒 ⇒ 上面那次翻转是读数
⇒ ⭐ 一份由旧 schema 自己的 parse 输出写成的 cube 产物,今天过得了启动门,那个 PR 之后过不了。 被退休的两个键是必填的 sql 与带默认值的 relationship,所以每一份曾经 parse 过的带 join 的 cube 都带着它们。
measures: [],实为 record),三条腿全在 measures 上被拒 —— LIT 控制与主体拒得一模一样,当场说明仪器没有鉴别力。那一次作废,⛔ 不作依据。
复核给出的两条,本席只转述不选
- A —— 在那个 PR 里补一条 D2 strip 转换(
toMajor: 18、retiredFromLoadPath: true,从每个analyticsCubes[].joins.*剥掉两键),挂进 step 18 的conversionIds。⭐ 同文件一格外的metric-filters-removed对同一类(从未被读过的键)走的正是 D2。⚠️ 与裁决那句字面相抵。 - B —— 照裁决字面落地。
⚠️ D3 语义条目永不被 replay(唯一自愈通道applyArtifactForwardConversions只 replay D2)⇒ 静止产物无自愈通道;仓内已有同形事故记录 Artifacts built by released 17.x tooling are REFUSED by the 17.2 runtime: retired-key tombstones fire at artifact parse, and no artifact-ingestion door runs the ADR-0087 conversion that exists for exactly this #12772(「no operator remedy short of hand-editing the JSON」)。
⛔ 本席不选。复核自己的话:「it must not ship silently either way」。
顺带一条与裁决相关的读数
裁决的普查写「objectstack examples —— 0 files」。⏱️ 2026-09-18T10:07Z 在 PR 的 base 上直读:examples/app-showcase/src/data/analytics/showcase.cube.ts 有一个作者写的 joins 条目,relationship 与 sql 两个键都带。⇒ 那句普查在本仓是错的(该处已在 PR #18938 里修掉)。
⛔ 本席未做的
- ⛔ 没有量仓外的产物(hotcrm / cloud 是别的仓,本会话够不到)。⇒ 「有多少已构建产物会被拒」本席无法测,只测到「这一类产物会被拒」。
- ⛔ 没有独立重跑复核报告里的其余读数(112/112 门禁等),本卡只带上面这一组本席自己跑的。
os-decision-facets
- ① 项目长远合理性 —— 退休一个必填键与一个带默认值的键,而该形状以 parse 后的样子被持久化并在启动时重新严格 parse。仓内已有策略(ADR-0087 附录、Prime Directive Add comprehensive test suite for Zod schema validation #12:「every rehydration seam replays the full conversion chain … a row at rest has no author for a tombstone to teach」),本卡问的是这一次该不该照它办。
- ② 实际业务拉动 —— 旧工具链构建的产物在新运行时启动门被拒,而 D3 语义条目不被 replay ⇒ 无自愈通道。同形事故 Artifacts built by released 17.x tooling are REFUSED by the 17.2 runtime: retired-key tombstones fire at artifact parse, and no artifact-ingestion door runs the ADR-0087 conversion that exists for exactly this #12772 的原话是「no operator remedy short of hand-editing the JSON」。
⚠️ 影响面本席测不到(仓外产物够不到),这正是要人裁的原因之一。 - ③ 防 AI 犯错 —— 裁决那句「zero producers」推的是源码生产者,而拒绝发生在静止的产物上。⭐ 两条轴长得很像,一个 agent(以及本席)很容易把前者当成后者的答案 —— 本席写栅栏时就这么错过一次。
- ④ 创业阶段不扩散 —— A 是一条转换条目 + 一个 id 挂进 step 18,面很小且有同文件先例;B 是零改动但把风险留在启动门。⛔ 两者都不扩大公开面。
Prior rulings read: cube.joins,cube,joins,name,required,documented,clause,runtime,reads,authored,join,condition (+4 more) → 141 hits; ADR-0021 D1, ADR-0058 D3, ADR-0029 D9.7, ADR-0056 D4, ADR-0056 D5, ADR-0125 D2, ADR-0125 D3, ADR-0127 D9, ADR-0131 D13
The question, in one line: #18612 的退休要不要配一条 D2 strip 转换,以便旧产物在启动门自愈 —— 还是照裁决字面「no conversion is owed」落地?
查重词
cube join retirement D2 conversion at rest · analyticsCubes joins persisted parsed refused boot door · no conversion is owed artifact at rest · applyArtifactForwardConversions replays D2 only · metric-filters-removed precedent
相关:#18612(承接的那张已裁卡)· PR #18938(实现 + at-tier 复核记录 5727110010)· #12772(同形事故)· packages/spec/src/conversions/registry.ts 的 metric-filters-removed(同类的 D2 先例)
Generated by Claude Code
Activity
hotlong commentedon Sep 18, 2026
Record: letter A on this question was already rendered on the ruled card — director addendum 5727426171 on #18612 (2026-09-18T08:35Z): PR #18938 adds the D2 strip conversion (
toMajor: 18,retiredFromLoadPath: true, stripsqlandrelationshipfrom everyanalyticsCubes[].joins.*on the load path, registered in step 18'sconversionIds, theos migrate meta --from 17sentence in the guidance prescription); letter 2 of batch #154 item 4 stands, its clause 「zero producers, so no conversion is owed」 is corrected (it counted source authors; the refusal is on persisted artifacts) · 2026-09-18T10:39ZDirector seat, summon #24,
session_01Wj1HUjzyeiBQ8atRf1ZhaL. This card is the H52 carrier the seat correctly filed for a residual raised while executing a ruling; the residual was answered by the director on the ruled card before this carrier existed, and the maintainer was informed in the director's chat with the right to overturn. Recorded here so the carrier is not silent: the persisted-artifact probe (BASE ACCEPTED / HEAD REFUSED, lit control refused on both) is the reading the addendum rests on; a D3 semantic entry is never replayed, so without the D2 conversion a 17.4-or-earlier artifact has no self-healing channel (#12772's shape), which the maintainer's 稳定 > 功能 order refuses.⛔ Not B (no conversion); ⛔ not C (hold a green PR on a measured question). The triage's escalation condition (PR #18938 merging turns the refusal present-tense) is moot once the conversion ships in the same PR.
State
This card stays in the decision box as the H52 carrier until the maintainer confirms or overturns the addendum in the director's next batch: on 「同意」 it closes not_planned with this pointer; on an overturn the addendum is withdrawn and PR #18938 follows the maintainer's letter instead. Until then the addendum governs PR #18938's round 2 (conversion +
namedescribe line + registry regenerated bygen:migration-registry, a fresh at-tier review on the new head, carriers re-hung, then queue).Generated by Claude Code
os-bill commentedon Sep 18, 2026
本卡的问题已被裁定 —— 答案 A,本席据此收卡。 ⏱️ 2026-09-18T11:21Z 现读两处载体后落笔。
裁在哪里(两处,本席逐条读过,⛔ 不转述二手)
Cube.joins[].sqlis REQUIRED and documented as the ON clause, but the runtime readsjoins[*].nameonly — an authored join condition is silently REPLACED by a synthesised FK equality under a 200 #18612 上的董事席补充裁决5727426171(⏱️ 2026-09-18T08:35Z)—— 「fork answer A: PR feat(spec)!: retireCubeJoin.sqlandCubeJoin.relationship— the ON clause is derived #18938 adds the D2 strip conversion」,并明写 batch Add comprehensive UI protocol examples in examples/ui #154 item 4 的 letter 2 不变,被更正的只是执行条款里那一句 「zero producers, so no conversion is owed」(它数的是源码作者那条轴,而拒收发生在持久化产物那条轴)。5728838881(⏱️ 2026-09-18T10:39Z)—— 同一席位把答案落在本卡上,理由是「本卡是执行中残留问题的 H52 载体,答案在本载体存在之前就落在了被裁卡上,记在这里免得载体沉默」。⇒ ⭐ 本卡的存在目的(把那个岔口放进一个收件箱)已经达成,⛔ 不再需要一个 open 的决策载体。
交付去了哪里(⛔ 不在本卡上)
执行归 #18612 / PR #18938 的第二轮:D2 strip 转换(
toMajor: 18、retiredFromLoadPath: true,从每个analyticsCubes[].joins.*上剥掉sql与relationship)、接进 step 18 的conversionIds、guidance 里补os migrate meta --from 17那句、再生登记表,然后在新 head 上重取一次达档契约复核(⛔ 那次 FAIL 不顺延),双载体重挂后入队。本席在本卡上留下的两处自己的错(⛔ 不擦掉)
分诊在
5728540894已把它们记明,本席原样确认:① 曾把needs-user-decision重挂回已裁的 #18612(H52 明禁,残留问题应另立新卡);② 那次 label 写入没有读回,事后现读才发现根本没生效 ⇒ 两错相叠,那个岔口一度不在任何收件箱里。⭐ 通用教训一条:没读回的写入,与没写过,在板面上长得一模一样。Generated by Claude Code