Repository navigation
docs: shared picklist — NORTH-STAR feature line, two planned records-forms items, coverage waiver; upgrade skill stops claiming a connector sync ran - #20938
Conversation
…ed records-forms items, coverage waiver The feature-map line for the shared picklist joins step 2's records rows and names two new records-forms items, both `planned`: the spec layer landed but no runtime reads a picklist yet, so neither item has anything to drive. The picklist kind is waived in coverage.json with the measured reason and the condition that retires the waiver. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
The worked R1 in the upgrade skill's examples walks a protocol-16 `connectors[].fieldMappings[].transform` source. Since the connector sync keys retired, the chain removes all of `fieldMappings` after the `transform` key, and the tombstone the author meets is that key's. The example said the connector had been landing raw values and its report template verified the decision with a "connector sync run"; no engine ever ran a connector-attached sync, so both now say what is true. The file shrinks by 37 bytes (1197 to 1188 tokens) at the same 119 lines. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsShape of the diff. Four files, +111 / −9, net against merge base A. B. C. D. E.
F. The PR body as text the maintainer acts on. "#20903 (0efbdc3)", "toMajor 18, part of the default ② Semver levelThe diff publishes nothing from any package: ③ Boundary flagsDev report
Reviewer flags, none blocking: (i) sentence 1 of the skill rewrite versus the template's "Chain: 16 → 17" (E.1) — one clause naming the chain's default terminus, or the template's chain, can ride this PR before the hand-off; every claim is true on Check-runs on Implemented-by: VERDICT: PASS Adopted and posted by
Generated by Claude Code |
…ime reads a picklist", and the checklist gate stops saying the ledger has no planned items - The upgrade walkthrough's report template names the chain the default run replays (16 -> 18), so it matches the rewritten sentence that the chain removes all of `fieldMappings`. - The picklist item's history and the coverage waiver said nothing outside packages/spec reads a picklist; the CLI's i18n walk does. Both now say no runtime reads one. - Four sentences in scripts/check-platform-checklist.mjs said the live ledger carries zero planned items. It now carries two, none mapped in coverage.json, so they now name that condition instead. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgmentsShape of the delta. One commit, Cut (i) — the template chain line Cut (ii) — "nothing outside Cut (iv) — the four The prior record's judgments, re-read at the new head. A (the NORTH-STAR row): the delta does not touch The PR body at the new head — every sentence false, stale or contradicted (the seat writes the edits at ACCEPT).
② Semver levelUnchanged by the delta and re-checked at the head: the five paths are ③ Boundary flagsCut-round report
The prior record's flags at Check-runs on Implemented-by: VERDICT: PASS Adopted and posted by
Generated by Claude Code |
维护者速读(终稿)· 2026-09-30T21:57Z
改了什么:
为什么改:
风险与代价(含回滚):
席位意见:
你要做的:
Generated by Claude Code |
Part of #19518
The Tier H docs follow-up for the shared picklist: the section "Also with this card" on the card, plus one skills correction carried from #20281 under ruling 5916259513. The card stays open until this lands; the seat closes it by hand. Five files, no package source, nothing published from any package.
What changes
docs/NORTH-STAR.md: one new line in step ② 「本地跑起来、看到」, records axis, with the card's text verbatim:records · 共享选项集:多个对象复用同一份选项,客户按组织追加值而不改应用源码 · records-forms · picklist-shared-across-objects, picklist-org-append. It sits after the last existing records row (search), so it ranks below every records capability that already exists. Moving it up is a priority call for the maintainer.docs/qa/platform-checklist/areas/records-forms.json: two new items, bothstatus: "planned",since: null,P2, with no steps (README, "Implementation status"):records-forms.picklist-shared-across-objectscovers phase 1. One picklist on two objects: both are served the same resolved options, a packagepicklistExtensionsvalue reaches both, the write door refuses a value outside the set, and a locale switch relabels the options. It carries three drafted acceptance clauses taken from the design of record and from the acceptance sentence of picklist metadata kind — runtime: resolvepicklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519, so the runtime PR has a concrete target when it promotes the item.records-forms.picklist-org-appendcovers phase 2. Organization A appends a value without editing the app source, A can write it, and organization B is refused. It carries no acceptance clauses, because the overlay's schema and write door are not designed. AknownGapsentry records that the overlay is not declared: the picklist registry row hasallowOrgOverride: false, and ruling 5904864936 defers the overlay to its own sub-issue.docs/qa/platform-checklist/coverage.json:picklistgets a waiver. It was UNCLASSIFIED. The waiver states the measured reason:packages/spec/liveness/picklist.jsongrades every keyplanned, andcheck-stack-collection-mapsholdspicklistsandpicklistExtensionsas PENDING rows for picklist metadata kind — runtime: resolvepicklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519. It names both planned ids and states what retires the waiver.skills/objectstack-upgrade/references/examples-upgrade.md: the worked R1 walks a protocol-16connectors[].fieldMappings[].transformsource. Since feat(spec)!: connector-attached sync leaves the connector — syncConfig / fieldMappings retired, mapping gains the connectorSource pull binding (#20281 stage 1) #20903 (0efbdc3), the chain removes the whole offieldMappingsaftertransform(connector-sync-keys-removed, toMajor 18, part of the defaultos migrate meta --from 16terminus), and the author meets that key's tombstone. Three sentences said otherwise, and each now says what is true:transformtombstone. It now names thefieldMappingstombstone.scripts/check-platform-checklist.mjs: four sentences (three comments and the self-test success line) said the live ledger carries zero planned items. They now say that nocoverage.jsonentry maps a planned item.How behaviour that does not exist yet is represented
The checklist's own rules settle the status.
plannedis for a capability the definition requires and the platform does not implement or verify yet. A planned item never runs and is never coverage. Both items are planned: no runtime reads a picklist yet.The coverage rule also settles the waiver. A kind whose only items are planned is UNMAPPED, and the gate's instruction is "Add an item that RUNS, or waive the kind with a reason". An entry cannot hold both, so the planned ids are named in the waiver's prose. One consequence:
checklist-select capability:picklistmatches nothing until the waiver flips toitems.Two content choices are the rules' to leave open. The dev report asks about both:
picklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519 groups the relabel with phase 1.Skill readings (
skills/**)examples-upgrade.mdlinesexamples-upgrade.mdbytes / tokens (ceil(bytes/4), ceiling 1197)SKILL.md, linesThe additions are paid for by deleted content. Nothing was re-wrapped to buy lines. The ceiling stays 1197, with headroom 9. Lowering it is a separate edit to the ratchet script.
Local verification, at cab0e1b
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 43 families from the five paths. All 43 ran;--rananswers "43 derived famil(ies) accounted for — 43 run, 0 NOT-MEASURED", exit 0.check:platform-checklistexits 1 on the pre-existing anchor below.check:pm-dispatch-gatesexits 0 (1976 self-test cases).check:doc-formula-expressionsfirst exited 3 (PREREQUISITE NOT MET: no lint or formula dist). After a locked build of those two packages it exits 0.pnpm check:platform-checklistexits 1, the same as onorigin/main:coverage.json · picklist: UNCLASSIFIEDandareas/identity-auth.json: ABSENT SYMBOL … auth-plugin.ts#twoFactor;twoFactoranchor, which this diff does not touch;pnpm gen:checklist-statuslists records-forms as 40 active and 2 planned (264 active and 2 planned overall).node scripts/check-skills-token-ratchet.mjsexits 0: "examples-upgrade.md is 1188 tokens (ceiling 1197; headroom 9)".node scripts/pm/check-governed-merges.mjs --branch HEADexits 3, GOVERNED, landing tier H. Two of five paths hit the register (skills/**,docs/NORTH-STAR.md). The diff is +119 / -17.skills/ships throughnpx skills addand appears in no package'sfiles[].skip-changesetis applied.Acceptance notes
scripts/check-platform-checklist.mjssaid in four places that the live ledger carries zero planned items. This PR corrects them (cab0e1b557); the tests are unaffected (221 assertions pass). Carrier: this PR.skills/objectstack-upgrade/evals/protocol-major-upgrade.json, eval 3, was read and left unchanged. Its prompt, that the chain droppedfieldMappings[].transform, is still true. Its expected answer, "delete because the member never executed", is also still true, and it claims no sync run.Path:lines on picklist metadata kind — spec:picklistcollection,Field.select({ picklist }), server-resolved options, translation face (phase 1 of objectstack#18164) #19518 and picklist metadata kind — runtime: resolvepicklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519 still read 清单项待写. They can name the two ids once this lands.维护者速读(草稿)
终稿以席位在本 PR 上的「维护者速读(终稿)」评论为准;下面与终稿一致。
改了什么:
planned项(已计划,还不能跑):coverage.json给 picklist 记一条带理由的豁免。transform墓碑;第二、三句说连接器同步跑过、落过数据,实际从来没有引擎跑过。为什么改:
picklist→ options when serving field metadata, validate writes against the resolved set, apply package-level extensions (phase 1 of objectstack#18164) #19519)还没做,两个项都没东西可跑。清单规则规定这种情况标planned、覆盖表用豁免,不能拿planned冒充覆盖。风险与代价(含回滚):
8e7420019e和cab0e1b557),CI 全绿。席位意见:
① 「客户按组织追加值」(第二期)现在就写进路线图和清单,作为 planned 需求。席位意见是保留:文字是卡片原文,planned 不算覆盖,也不宣称已经做到。但裁决 5904864936 说的是等有实测的客户需求再立子卡。您若不想现在就把它放上路,删掉那一行的后半句和第二个清单项即可。
② 「切语言换标签」放在第一期的项里(卡片原来归在第二期)。它在第一期就会交付,放在第二期要等很久才能验证。席位同意这样放。
③ 新行放在 records 组最后,排序最低。这张表的顺序就是优先级,您想提前就挪一下位置。
你要做的:
Generated by Claude Code