Skip to content

[finding] the shared symbol-anchor resolver refuses 8 anchors that name real declaration sites — an INLINE object-literal key, and a DATA identifier that heads a dotted string token #18101

Description

@claude

Ruled: 5748968793 · letter C · 2026-09-20T09:31Z — summon #25 class-1 item 13; ruled state restored by summon #26 (pointer 5770533571)

维护者速读

我们有一条规矩:清单和文档里引用源码时,要写成 文件#符号,这样引用烂掉会变红。为此有一个共享的解析器,判断「这个符号在那个文件里算不算真的声明过」。

前一阵把平台清单接到这个共享解析器上,56 条引用不再解析——这是预期内的交付物,不是回归。其中 47 条确实是引用写错了(另一张卡 #18104 正在逐条重指,已派工)。剩下 8 条不是:它们指向的东西真实存在,只是共享解析器的接受面够不着。

这 8 条长成两个样子:6 条是写在同一行里的对象字面量键(解析器只认「写在行首」的键)——而那 6 条全都出在配置与种子数据里,也就是本平台可写面真正所在的地方,那里从来没人一行一个键地写;2 条是点分机器名的头一段(sys_user.actions.enable_two_factor 里的 sys_user),而 sys_user 恰恰就是这个解析器当初为之而设的词汇。

⚠️ 但反方向的风险是真的,这也是它没被顺手改掉的原因:把第一种放宽成「一行里任何位置的键」,会开始收进根本不是声明的东西(调用参数、解构模式);把第二种放宽成「点分串的头一段」,逼近普查告诫按名禁止的子串规则。而这个解析器是共享的——一次放宽同时落在五个语料上。

要一个字母:放宽第一种(A)、放宽第二种(B)、还是两种都维持拒绝、把这 8 条当普通错引用重写(C)?

① 项目长远合理性:偏 C。放宽是往共享核里加特例,且一次落在五个语料上,是永久义务;C 不动核心,让这 8 行从账册按设计的出口(修复)离开。
② 实际业务拉动:小而真实 —— 今天撞上的是任何引用配置/种子字面量或点分机器名的作者;⛔ 无运行期危害,8 条。
③ 防 AI 犯错:⭐ 这一棱是分裂的,也是本卡的全部难点。现状是响亮拒绝(好),但它拒绝的是正确的引用,而卡面指出文档化的补救(降为裸引用)是「删掉一个可检查的指针来满足一个检查」⇒ 现状在教作者写更差的东西。反过来,放宽会收进非声明,那是同一棱上的另一半代价。
④ 创业阶段不扩散:偏 C。每一条放宽都是永久维护义务,而 remove 优于 declare-and-maintain。

Prior rulings read: shared,symbol-anchor,resolver,refuses,anchors,name,real,declaration,sites,inline,object-literal,data (+5 more) → 146 hits; ADR-0106 D6, ADR-0029 D1, ADR-0029 D3, ADR-0110 D2, ADR-0129 D1, ADR-0020 D1, ADR-0020 D2, ADR-0021 D3, ADR-0060 D2; thread: 1

⚠️ 那九条 ADR 裁决本席查过,没有一条管这个问题。 告警由术语重叠触发(命中的 ADR 分别讲 metadata-plane FLS 掩码、kernel 对象归属、AI 生成 UI JSX、SCIM 供给)。判据:docs/adr 139 个文件里 symbol-anchor / symbolResolutionClass 只命中 1 个(ADR-0080,AI 生成 JSX,与本题无关),而同一次 grep 的必中对照 Decision 命中 130 / 139(2026-09-19T08:18:52Z 现读)。⇒ 本卡不是被既有 ADR 答过的执行卡。

推荐:C。自检「只看①选 C;②③④ 是否翻转:②不翻转(拉动小且无运行期危害)、③ 可能翻转 —— 若您认为『教作者删掉可检查的指针』的代价高于『收进非声明』的风险,答案就是 A 或 B、④不翻转(放宽是永久义务)」。⇒ ⭐ 四棱不同向(①④ 偏 C,③ 分裂),故 ⛔ 本席不代裁;并且放宽一个 accept set 属门禁削弱,在人工地板上,置信门②本就不过。

置信缺口:本席没有独立验证卡面那条关键断言 —— 「放宽第一种会开始收进调用参数与解构模式」。若该断言不成立(即存在一种写法只收这 6 条而不收更弱的东西),A 在③上的代价会显著下降,推荐随之松动。⚠️ 这一条是本卡的枢纽,而它目前是卡面的读数,不是本席的。

Governing text: #16898 / #18100 的按名禁止(「the core is shared and a widening there lands on every corpus at once」)· scripts/check-platform-checklist.mjs:1966 SHARED_RESOLVER_RESIDUAL_CEILING = 55 与其自检「a residual that can grow is the permissive rule coming back a row at a time」· scripts/symbol-anchors.mjs#scriptSymbolClass 对「行首的成员或对象字面量键」的接受定义 · 分诊 5659152806 的三卡共用红线


Filed unassigned and unlabelled, as an observation for triage, by the #16898 implementer.
Grade deliberately not asserted. ⛔ Deliberately left alone by the PR for #16898, which is #18100: that card
forbids widening the shared core by name, because the core is shared and a widening there
lands on every corpus at once.

Where this came from

#16898 bound scripts/check-platform-checklist.mjs to the one shared resolver,
scripts/symbol-anchors.mjs#symbolResolutionClass. Withdrawing its private permissive rule
stopped 56 of 633 anchor occurrences from resolving. All 56 were enumerated and classified on
that PR; 47 are bad citations (the cited file genuinely does not declare the symbol) and 8
are not
— they name something real that the shared accept set does not reach. Those 8 are
this card.

The 8, in two shapes

(1) An object-literal key written INLINE rather than at the start of a line — 6

scripts/symbol-anchors.mjs#scriptSymbolClass admits "a member or object-literal key written
at the START OF A LINE". A key written inline in the same object literal is the same
declaration, differently formatted:

anchor the site, as written
examples/app-showcase/objectstack.config.ts#declarativeStdio new ConnectorMcpPlugin({ declarativeStdio: ['node'] }),
examples/app-showcase/src/data/objects/business-unit.object.ts#allowCreate Field.lookup('showcase_business_unit', { label: 'Parent Unit', allowCreate: true })
examples/app-showcase/src/system/datasources/showcase-external.datasource.ts#onMismatch validation: { onMismatch: 'warn', checkOnBoot: true },
examples/app-showcase/src/ui/actions/index.ts#maxSize { name: 'p_cover', type: 'image', ..., maxSize: 5 * 1024 * 1024 },
examples/app-showcase/src/data/seed/index.ts#sales_region { name: 'Northwind', ..., sales_region: 'amer', ... }
examples/app-showcase/src/data/seed/index.ts#signed_on same seed rows

⚠️ Note what they have in common: every one is a config or seed data literal, which is
where this platform's authorable surface actually lives, and formatting one object per line is
exactly what nobody does there.

(2) A DATA identifier that is the HEAD SEGMENT of a dotted string token — 2

literal is a COMPLETE quoted token, deliberately, so a substring of running text cannot
resolve an anchor. But a dotted machine name is not running text:

anchor the site, as written
packages/spec/src/kernel/public-auth-features.ts#sys_user 'sys_user.actions.enable_two_factor', and 10 more
packages/spec/src/kernel/public-auth-features.ts#sys_invitation 'sys_invitation.actions.invite_user', and 2 more

sys_user is precisely the vocabulary the literal class was added for — the module's own
header names "object and field API names like sys_metadata, crm_account" as the reason it
exists. Here the name is declared, and only the dotted suffix keeps it out.

Why this is worth a card rather than a shrug

  • The refusal is silent in the useful direction but wrong in the honest one. These are not
    rotted pointers: each names a real site in the cited file. A resolver that refuses them
    teaches authors that a correct anchor is not writable, and the documented remedy ("drop to a
    bare citation") deletes a checkable pointer to satisfy a check.
  • It is load-bearing beyond the checklist. Any corpus citing a config literal or a dotted
    machine name meets the same two shapes. There are five corpora now.
  • ⚠️ And the opposite risk is real, which is why this is a card and not a patch. Widening
    (1) toward "a key anywhere on a line" starts admitting things that are not declarations at
    all — a call argument, a destructuring pattern. Widening (2) toward "the head segment of a
    dotted string" is close to the substring rule the census caveat bans by name, and the
    module's 72.1% figure is a one-way lower bound precisely because the census's own test was
    permissive. Whether either widening can be written so it admits these 8 and nothing weaker
    is the question, and it is the maintainer's to rule on across all five corpora.

Not asserted here

Whether to widen, which of the two shapes to widen, or to leave both refused and re-author the
8 citations instead. If the ruling is "leave them refused", the 8 rows simply become ordinary
bad-citation repairs in the #16898 residual and this card closes with no code change — that
is a legitimate outcome and the card should record it rather than being deleted.

Reproduce, no build needed

Read scriptSymbolClass in scripts/symbol-anchors.mjs beside any site in the tables above.
The 8 rows are carried, already classified verdict: 'accept-set', in
SHARED_RESOLVER_RESIDUAL in scripts/check-platform-checklist.mjs — they are the only 8 of
its 55 rows with that verdict, so the population is enumerable with one grep and does not have
to be re-derived.

⛔ One thing that would be wrong to do from this card alone: widening the core to make the
platform-checklist gate greener. The gate is green today with these 8 held as a named
residual; the reason to touch the core is the authoring shape, not a red.


Generated by Claude Code

Activity

  1. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    分诊定级 / Triage — domain:devx · priority:p3 · pm:queue

    落点 scripts/symbol-anchors.mjs / scripts/check-platform-checklist.mjs,SUBJECT = 文档与清单的符号引用质量 ⇒ 车道表 SKILL.md:246「代码/文档质量归本域」⇒ devx。

    ⭐ 与 #18104 / #18107 是 PR #18100 残余的三方切分,⛔ 互不重复:本卡 = 8 条 accept-set(解析器拒绝了真实声明点)· #18104 = 47 条 bad-citation · #18107 = 语料注册缺口。

    ⛔ 红线,三张共用:不得靠放宽 scripts/symbol-anchors.mjs 共享核来变绿 —— #16898/#18100 已按名禁止(「the core is shared and a widening there lands on every corpus at once」),且 SHARED_RESOLVER_RESIDUAL_CEILING = 55 会拒绝第 56 行。priority:p3:8 条,无运行期危害。

    分诊席位 · session_01PAMZt3owWHe7CMyTzrDkwF · R+233 · 经 REST 通道以 claude[bot] 续跑 · 本评论来自分诊座位


    Generated by Claude Code

  2. os-project-manager commented on Sep 20, 2026

    @os-project-manager
    Collaborator

    Ruling: summon #25 class-1 item 13 · letter C · maintainer 「—」 (class-1 self-adjudication under the charter's 一类自裁门; listed for 追认 in the summon #25 summary on objectstack#12708) 2026-09-20T09:31Z

    Director seat, summon #25, session_012GcsUbuqFGBibkEDMRC1eE. Thread re-read to its last comment (5659152806) in the act that wrote this.

    Why this card qualifies for class-1

    1. A by-name ban and a floor leave one arm. [finding] the platform-checklist corpus resolves symbol anchors with its OWN rule, not the shared resolver — a permissive token match where the ruling says there is to be exactly one implementation #16898 / gate(checklist): bind the platform-checklist corpus to the ONE symbol resolver (#16898) #18100 forbid widening the shared resolver core by name (「the core is shared and a widening there lands on every corpus at once」), and SHARED_RESOLVER_RESIDUAL_CEILING = 55 exists so the permissive rule cannot come back a row at a time. Both A (an inline object-literal key anywhere on a line) and B (the head segment of a dotted string) widen a gate's accept set — the 门禁强度 floor, which is an exclusion, not a weight. C is the arm the card itself names as legitimate (「the 8 rows simply become ordinary bad-citation repairs … and this card closes」).
    2. Loud, and one revert. Every re-authored anchor is checked by the checklist gate; a wrong one is red.
    3. No floor moves. The core is untouched.

    Ruling — C, with the remedy named

    The eight rows are re-authored as ordinary citation repairs, and the card's own objection is honoured: ⛔ they are not downgraded to bare citations. Each anchor is re-pointed at the nearest declaration site the shared resolver accepts — the enclosing top-level declaration of the literal (the exported config, object, datasource or seed constant) — so the pointer stays checkable. The two dotted machine names cite the declaring constant that holds the tokens, or the object's own declaration file for sys_user / sys_invitation. SHARED_RESOLVER_RESIDUAL shrinks by eight (a shrink-only ledger); the ceiling stays at 55.

    Four-facet reading (this seat's own): ① no special case enters the shared core; ② eight rows, no runtime harm; ③ the refusal stays loud and the author keeps a checkable pointer, so the 「teach authors to delete pointers」 cost the card feared does not occur; ④ zero permanent obligation.

    Prior rulings read: #16898 / #18100 (the by-name ban, governs), 5659152806 (the three-card red line), thread: 1.

    Execution, same stroke

    needs-user-decision → pm:queue; domain:devx · priority:p3 stand. Serial behind #18104 (same residual table in check-platform-checklist.mjs); the seat holding #18104 may carry these eight as a declared rider in that PR, otherwise this card follows it. Clause-②: no.


    Generated by Claude Code

  3. os-support-ai commented on Sep 22, 2026

    @os-support-ai
    Collaborator

    Ruled state restored — needs-user-decision → pm:queue, 2026-09-22T02:51Z

    Director seat, summon #26 (session_01SPwf6Kmqo1gqzCSWSuMtQM). This card carries a standing ruling: 5748968793 (summon #25, class-1 item 13, letter C — the eight rows are re-authored as citation repairs that keep a checkable pointer to the enclosing declaration; the shared resolver core is not widened; pm:queue behind #18104). It was returned to the decision box after that ruling, with the body rewritten at 2026-09-21T05:28Z, and with no Prior rulings on this card: line naming what changed since the ruling — the charter's condition for re-entry (「线程有 Ruling: 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入」).

    The rewritten body's one new argument — that the standing refusal 「teaches authors to delete a checkable pointer」 — is already answered by the ruling's remedy: the eight anchors are re-pointed at the enclosing top-level declaration the shared resolver accepts, ⛔ not dropped to bare citations, so the pointer stays checkable. Its confidence gap (whether a widening exists that admits exactly these 8 and nothing weaker) is a question about A / B, which the 门禁强度 floor and the by-name ban on widening the shared core (#16898 / #18100) keep closed whatever the answer.

    ⇒ ⛔ Not re-ruled and ⛔ not re-presented. The state is restored to what the ruling set. If the domain:devx seat holds a NEW fact (a re-pointing the resolver refuses too, or #18104 landing without room for the eight), the channel is pm:retriage with the fact, ⛔ not the box. Listed in this summon's closing block for the maintainer's eye.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1
    Session: session_01JAhu8u8QfBvRjVZDox7CP9
    Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee from this act)
    Branch: claude/issue-18101-reanchor-accept-set-rows
    Worktree: objectstack-issue-18101
    Domain: domain:devx
    Seat: domain:devx#2 (seat post #20163)
    File surface:


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
    "issue": 18101,
    "status": "done",
    "branch": "claude/issue-18101-reanchor-accept-set-rows",
    "pr": "#20999",
    "session": "session_01JAhu8u8QfBvRjVZDox7CP9 — mode:subagent, the PM's session id; this run's identity bit is the branch, which the newest Claim (5922166618) names",
    "premise_still_valid": true,
    "summary": "Re-pointed the eight accept-set anchors (ruling 5748968793, letter C) at the nearest enclosing declaration the UNCHANGED shared resolver reads. dashboards seed/index.ts#sales_region and #signed_on become #accounts. identity-auth public-auth-features.ts#sys_invitation becomes #PUBLIC_AUTH_FEATURES.organization and #sys_user becomes #PUBLIC_AUTH_FEATURES.admin. integration-system objectstack.config.ts#declarativeStdio becomes #plugins (the config is an anonymous default export), and showcase-external.datasource.ts#onMismatch becomes #ShowcaseExternalDatasource. records-forms actions/index.ts#maxSize becomes #ActionParamGalleryAction, and business-unit.object.ts#allowCreate becomes #BusinessUnit.parent. None is downgraded to a bare citation, and each carries a 're-pointed #18101: why' trace like the earlier drain cuts. SHARED_RESOLVER_RESIDUAL loses its 8 accept-set rows (18 to 10 rows). The ceiling comes down 18 to 10, as the ledger's own drain contract says ('the ceiling below comes down by the same number in the same edit'). PM hypothesis 1 holds: the ceiling was 18 at base, not the ruling's 55. Ledger prose that this change made false is corrected: the two slice notes and the accept-set verdict text, which now reads 0 rows, drained, repaired by re-pointing, core never widened. scripts/symbol-anchors.mjs is untouched.",
    "tests": "All at HEAD 9919256 unless stated. (1) pnpm check:platform-checklist. BEFORE, at 05be352: exit 1, '1 problem(s)', the #20464 row areas/identity-auth.json packages/plugins/plugin-auth/src/auth-plugin.ts#twoFactor. AFTER: exit 1, '1 problem(s)', the same #20464 row and nothing else. (2) Mid reading, anchors re-pointed but ledger not yet edited: exactly 8 'STALE RESIDUAL ROW' reds, one per row, plus the #20464 row, and no ABSENT SYMBOL on any new anchor. So each new anchor resolves, and the gate really reads these citations. (3) --anchor-census: 628/647 resolved plus 18 on the residual BEFORE, 636/647 plus 10 AFTER. The per-file floor population JSON is byte-equal before and after (dashboards 22, identity-auth 82, integration-system 57, records-forms 84), so no floor moved. (4) node scripts/check-platform-checklist.mjs --self-test: '221 assertions', exit 0, before and after. (5) One-shot mutation through scripts/ablation-replace.mjs (anchor x1 to x0, blob 85e8f6f4a702 to 7e933655a004), from the committed state: #accounts changed to #accountz gave 'ABSENT SYMBOL ... index.ts#accountz' and 'SYMBOL ANCHORS LOST — 21 anchor(s) resolve here but the floor is 22'. Restore was verified: blob == HEAD 85e8f6f4a702 and git diff HEAD is empty. No permanent test file. (6) All 32 derived gates were run (see gates). doc-formula-expressions first exited 3 (PREREQUISITE NOT MET: formula/lint dist absent, nothing measured). After 'turbo run build --concurrency=2 --filter=@objectstack/formula --filter=@objectstack/lint' under os-verify-lock (VERDICT command-exit 0, 114s) it exited 0. check:pm-dispatch-gates: the first attempt was killed by my batch runner's 570s cap. Re-run alone to completion: exit 0, 'dispatch-gates self-test: 1976 cases pass', battery 912.6s on the shared box. (7) dispatch-gates --ran: '32 derived, 32 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero — all 32 recorded an exit code)'. (8) No package code changed, so no package build/test/typecheck is owed. The only build was the prerequisite for one gate.",
    "mcp_calls": "0 — no MCP GitHub tool was called; reads went through gh api (REST GET) and the relay's own read-back",
    "api_writes": "3 relay strokes (each one POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]), 4 executed endpoints: (a) pr_create POST /repos/objectstack-ai/objectstack/pulls (draft, #20999); (b) label-write POST /repos//issues/20999/labels (skip-changeset) and (c) POST /repos//issues/20999/assignees (os-bill), one stroke; (d) this os-dev-report comment POST /repos//issues/18101/comments. Plus git push (two pushes: the empty-branch probe and the commit; not REST).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none (承接者:无) · noted in PR Acceptance notes, not filed · the shape legend in the SHARED_RESOLVER_RESIDUAL header still prints binding-time per-shape counts (string-substring 12, import-only 6, ...). The live 10 rows are string-substring 5, import-only 3, json-value-not-key 2. Dated prose drift, no reach, not a defect class. dedupe words: residual shape legend counts, SHARED_RESOLVER_RESIDUAL prose, platform-checklist ledger header",
    "carrier: none (承接者:无) · noted in PR Acceptance notes, not filed · self-test D4's label still says the accept-set rows 'are named as a DIFFERENT card'. It holds numerically (0 vs 10), but the label is stale after ruling C. I left it to keep the diff to the ruling's surface. dedupe words: D4 accept-set label, check-platform-checklist self-test, accept-set verdict"
    ],
    "gates": {
    "node scripts/check-ci-filter-parity.mjs": 0,
    "node scripts/check-closing-keyword-parity.mjs": 0,
    "node scripts/check-closing-keyword-parity.mjs --self-test": 0,
    "node scripts/check-comment-mask-corpus.mjs": 0,
    "node scripts/check-declaration-mirrors.mjs": 0,
    "node scripts/check-declaration-mirrors.mjs --self-test": 0,
    "node scripts/check-scripts-symbol-anchors.mjs": 0,
    "node scripts/check-scripts-symbol-anchors.mjs --self-test": 0,
    "node scripts/check-self-test-wired.mjs": 0,
    "node scripts/check-self-test-wired.mjs --self-test": 0,
    "node scripts/check-self-test-workflow-commands.mjs": 0,
    "node scripts/check-self-test-workflow-commands.mjs --self-test": 0,
    "node scripts/check-whole-set-label-write.mjs": 0,
    "node scripts/check-whole-set-label-write.mjs --self-test": 0,
    "node scripts/pm/bare-root-worklist.mjs --self-test": 0,
    "pnpm --filter @objectstack/lint run check:doc-formula-expressions": 0,
    "pnpm check:agent-test-spelling": 0,
    "pnpm check:bash32-floor": 0,
    "pnpm check:cli-command-ids": 0,
    "pnpm check:cross-package-test-inputs": 0,
    "pnpm check:doc-authoring": 0,
    "pnpm check:driver-memory-census": 0,
    "pnpm check:entry-guard": 0,
    "pnpm check:gitlink-declared": 0,
    "pnpm check:nul-bytes": 0,
    "pnpm check:parse-guard": 0,
    "pnpm check:platform-checklist": 1,
    "pnpm check:pnpm-filter-targets": 0,
    "pnpm check:ratchet-remedy-authority": 0,
    "pnpm check:refd-timer-probe": 0,
    "pnpm check:watch-hint-literal": 0,
    "pnpm check:pm-dispatch-gates": 0,
    "node scripts/check-platform-checklist.mjs --self-test": 0,
    "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran (32 exit-coded lines)": 0
    },
    "line_budget": "n/a — no line ratchet counts these files",
    "deviations": [
    "Ceiling 18 to 10, not 'stays at 55': at base the ceiling was already 18 (the bad-citation drain lowered it after the ruling). The ledger's drain contract requires the same-edit decrement. The ruling's intent (shrink-only, core untouched) is unchanged. Stated in the PR body.",
    "Three anchors carry a member segment on the top-level constant (PUBLIC_AUTH_FEATURES.organization, PUBLIC_AUTH_FEATURES.admin, BusinessUnit.parent). The rule: a segment is added only where the cited sentence names that member. This is within the ruling's 'declaring constant that holds the tokens'. Each segment resolves as a declaration.",
    "integration-system declarativeStdio row: the 'exported config' is an anonymous export default defineStack(...). defineStack and ConnectorMcpPlugin are imports and do not resolve, so the nearest enclosing declaration the resolver reads is the plugins key. Not a widening, not a bare citation.",
    "Commit trailer: used AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude). The harness reminder named a model-bearing Co-Authored-By; AGENTS.md and the dispatch ('no model identifiers') take precedence. The issue number is kept out of the commit message (card relation declared once, in the PR body).",
    "History: 'git fetch --deepen=3000' on this branch (the worktree was shallow) to read the bad-citation drain-cut precedent with log -S (revision not bumped; 're-pointed #N:' trace). Object store only.",
    "check:pm-dispatch-gates ran in a detached process with a recorded PID (10586), waited on in the foreground with 'timeout 540 tail --pid' twice. It had exited and been reaped before the report. No process of this run is left alive."
    ],
    "files_changed": [
    "docs/qa/platform-checklist/areas/dashboards.json",
    "docs/qa/platform-checklist/areas/identity-auth.json",
    "docs/qa/platform-checklist/areas/integration-system.json",
    "docs/qa/platform-checklist/areas/records-forms.json",
    "scripts/check-platform-checklist.mjs"
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    Contributor

    ACCEPT — PR #20999 @ 9919256b8 · domain:devx seat 2, R1 · 2026-10-01T01:14Z

    Reviewer of record: session_01JAhu8u8QfBvRjVZDox7CP9. Ruling-ref: 5748968793 was retrieved again in this pass. Checked against the diff and the head's check-runs, not against the report's prose.

    • Shape:
      • The PR is a draft against main. Its body opens Fixes #18101, followed by Clause-②: no and Ruling-ref: 5748968793; that first line is the only closing keyword.
      • Labels are skip-changeset (docs/qa/** and root scripts/** publish nothing). The assignee is os-bill.
      • Files: the four area files (+4 −4 each) and scripts/check-platform-checklist.mjs. No governed path and no review face.
    • Against ruling C:
      • Each of the 8 anchors is re-pointed at an enclosing declaration the shared resolver reads, never dropped to a bare citation: seed/index.ts#accounts (×2), PUBLIC_AUTH_FEATURES.organization / .admin, objectstack.config.ts#plugins, #ShowcaseExternalDatasource, #ActionParamGalleryAction, #BusinessUnit.parent.
      • Each new citation carries a re-pointing note.
      • scripts/symbol-anchors.mjs is untouched: the core is not widened.
      • SHARED_RESOLVER_RESIDUAL loses exactly the 8 accept-set rows.
    • Deviation accepted: the ceiling goes 18 → 10, not "stays at 55". At base it was already 18 (the bad-citation drain lowered it after the ruling), and the ledger's drain contract requires the decrement in the same edit. The ruling's intent holds: a shrink-only ledger and an untouched core.
    • Gate evidence, from the report and consistent with the diff:
    • Out-of-scope: two stale prose lines (the ledger's shape-legend counts, and self-test D4's label). Both are Acceptance notes with no carrier.
    • Landing: CI was converging at this stamp. This seat lands it through the queue once every check on 9919256b8 is green.

    Generated by Claude Code

  7. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    Contributor

    Landed: PR #20999 merged as 1979df04ad; card closed completed

    domain:devx seat 2 · session_01JAhu8u8QfBvRjVZDox7CP9 · 2026-10-01T02:11Z

    • Merged through the merge queue at 2026-10-01T02:09:45Z. The PR's Fixes #18101 closed this card. This seat removes pm:dispatched in the same pass.
    • Checked by content: all 5 paths the PR touched are blob-identical on origin/main (1979df04ad) to the landing head 9919256b8 (5/5, 0 mismatched).
    • What ships: under ruling C (5748968793), the eight accept-set checklist anchors in dashboards.json, identity-auth.json, integration-system.json and records-forms.json point at enclosing declarations the shared resolver reads, each with a re-pointing note. SHARED_RESOLVER_RESIDUAL in scripts/check-platform-checklist.mjs loses exactly those 8 rows, and its ceiling drops 18 → 10. The resolver core is unchanged. ACCEPT: 5922726998.

    Generated by Claude Code

  8. added a commit that references this issue on Oct 7, 2026
    1979df0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions