You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Checklist maintenance from the identity-auth QA run (#7663): 5 item/oracle/fixture corrections for docs/qa/platform-checklist #7740
Consolidated checklist-maintenance edits falling out of the identity-auth FULL-area QA run (#7663). All five are edits to docs/qa/platform-checklist/ (primarily areas/identity-auth.json) — checklist text / oracle / fixture-note corrections, not product fixes. Each item's product defect, where one exists, is filed separately.
Items
org-membership-team-management clause 1 (and its negative) name the wrong role vocabulary. The enforced builtin set is {owner, admin, delegated_admin, member} per ADR-0108 (BUILTIN_MEMBERSHIP_ROLE_OPTIONS, "nothing widens these at boot any more") — not{owner, admin, member, guest}. guest is actually rejected (400 ROLE_NOT_FOUND), and delegated_admin is legitimate. The stale spec doc-comment on MemberSchema.role (packages/spec/src/identity/organization.zod.ts:84-87, "Common roles: 'owner', 'admin', 'member', 'guest'"; the .describe(...) at line 87 repeats it) is probably where the checklist text came from — fix both the checklist clause and the spec doc-comment. (The spec doc-comment edit is a packages/spec change, so it may warrant its own tiny domain:spec PR; the checklist clause is the domain:devx part.)
invitation-scope-gates clause 6 conflates two axes.DelegableScope models ObjectStack positions / permission sets / business units and has no field that could carry a better-auth org invitation role, so it can never "contain member". The delegate demonstrably can mint a member invitation while the endpoint reports an empty assignable set — it under-reports, never over-reports (the safe direction). The clause needs a revision, not a product fix.
admin-lifecycle-operations clause 4 should name the authed-request oracle, not get-session's status code. better-auth's no-session convention is 200-with-null-body, so the clause's literal 401 expectation misdescribes a correct implementation. The session was provably gone; the clause should assert against a protected authed request, not get-session's status.
identity-import-wizard — add the fixture note that the auto policy's temporary-fallback branch cannot occur on objectstack dev: both transports always register and dev.ts hard-sets NODE_ENV='development' so isPhoneOtpDeliverable() cannot be made false. Record as a fixture note so the next sweep does not re-derive it.
Findings triage (grade): promoted — finding removed, pm:queue stays (resolves the filed dual pm-state). Scoped checklist/docs maintenance with named anchors — auto-queue class.
Premise spot-check on origin/main @ 8f1851e: item 1's spec-side half is live — the stale role vocabulary is still at packages/spec/src/identity/organization.zod.ts:84-87 ("Common roles: 'owner', 'admin', 'member', 'guest'", repeated in the .describe(...) at :87). Routing note for the executor: that one doc-comment line is packages/spec text (spec-surface territory); as filed the principal landing is docs/qa/platform-checklist/areas/identity-auth.json ⇒ domain:devx stands, and the spec doc-comment can ride as the declared cross-surface line item the card already names.
Activity
claude commentedon Aug 11, 2026
Findings triage (grade): promoted —
findingremoved,pm:queuestays (resolves the filed dual pm-state). Scoped checklist/docs maintenance with named anchors — auto-queue class.Premise spot-check on
origin/main@8f1851e: item 1's spec-side half is live — the stale role vocabulary is still atpackages/spec/src/identity/organization.zod.ts:84-87("Common roles: 'owner', 'admin', 'member', 'guest'", repeated in the.describe(...)at :87). Routing note for the executor: that one doc-comment line ispackages/spectext (spec-surface territory); as filed the principal landing isdocs/qa/platform-checklist/areas/identity-auth.json⇒domain:devxstands, and the spec doc-comment can ride as the declared cross-surface line item the card already names.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
huangyiirene commentedon Aug 11, 2026
Claim: PM loop round 5 (devx seat, 2026-08-11 term) — wave 5 unit A(清单维护同类打包)
Session: session_01GZKbx4xyF7U5WXj6ch49BM
Branch:
claude/issue-7740-checklist-run-notes-pack(pack:#7740+#7745+#7753+#7720,一 PR 四条 Fixes)Worktree: cloud dev session(独立容器)
Domain: devx
File surface(本卡):
docs/qa/platform-checklist/areas/identity-auth.json主落点 +packages/spec/src/identity/organization.zod.ts:84-87doc-comment rider(triage 已批随行,PR 正文声明跨面行项)Container & model: mode:cloud / claude-opus-5
Serial constraints: 包内四文件两两不相交;coverage.json ⛔ 只读(#7347 独占)
Generated by Claude Code
huangyiirene commentedon Aug 11, 2026
os-dev 主报告 — wave 5 unit A(清单维护同类打包:#7740 + #7745 + #7753 + #7720)
main,4 行 Fixes)claude/issue-7740-checklist-run-notes-pack@b067379session_013GSfhABhmzsa8uA2fZCiXU/ mode:cloud / claude-opus-5逐卡逐项完成情况
#7740 —
areas/identity-auth.json(5/5 落地) ·premise_still_valid: true(逐项见下)org-membership-team-management(step / clause / negative / source,rev 1→2){owner, admin, member, guest};source 引的正是那条陈旧 doc-comment{owner, admin, delegated_admin, member};新增「词表是闭的」条款(guest、stackposition、PermissionSet 名各被 400ROLE_NOT_FOUND拒于门外且不留行);source 改指membership-role.ts:116+ ADR-0108 +membership-role-vocabulary.dogfood.test.tsinvitation-scope-gates(step 8 / 条款 / negative / source,rev 2→3){ isTenantAdmin, scopes, placeableBusinessUnitIds, assignablePositions }(security-service.ts:92-105)与自作用域;邀请角色门交回条款 1–4;negative 拆开:over-report 才是 FAIL,under-report 是安全方向、禁止立案admin-lifecycle-operations(revoke step / 条款 / negative / source,rev 2→3)get-session状态码,期望 401get-session只作旁证并注明 200-with-null-body 约定,锚点session-of-record.test.ts:165teams-bu-membership(requires / knownGaps / step / 条款 / source,rev 1→2)blocked(fixture)share_new_inquiries_with_field_ops展开bu_field_ops子树,条款照跑。换成 zero-seeded-placements 注记:全新 boot 只 seed 树、sys_business_unit_member零行,必须先放置、BEFORE 读预期为空identity-import-wizard(knownGaps /auto条款 / source,rev 1→2)auto的 temporary-fallback 分支在objectstack dev下不可达(两路 transport 恒注册;NODE_ENV=development 使两个可达性门都无法为假),写明什么样的 boot 才能触发,并指引用temporary策略覆盖同一凭据路径Rider(triage 已批,PR 正文单列跨面行项):
packages/spec/src/identity/organization.zod.ts:84-87的 doc-comment +:87的.describe()已修正。两处主动声明的外溢,请 PM 裁断是否收回:
InvitationSchema.role(:139)携带同一缺陷('admin','member','guest')。卡面只点名 :84-87。我一并修了——留着就等于给下一个读者留下这张卡要关掉的同一个坑;纯注释文本,零行为。PM 若要严格按锚点,单独 revert 这一段即可。content/docs/references/identity/organization.mdx是从这些.describe()生成的,check:docs(build-docs.ts --check)是 CI 门禁,所以两行表格随之更新。本容器从未 install 过(无node_modules),无法跑真正的gen:schema+build-docs,因此是按生成器自身渲染路径手工对齐的:build-docs.ts:427原样输出 description,escapeMdxDescription只处理`/{/</|/\,新串一个都不含。这一处值得有构建树的人复核一眼——若 CI 的check:docs仍红,重跑生成器覆盖即可。#7745 —
areas/integration-system.json(1 修正 + 3 注记) ·premise_still_valid: trueemail-template-render(step / raw-send 条款 / negative / source,rev 3→4){ to, subject, bodyHtml }——实际被 400 "at least one of text or html is required"{ to, subject, html | text }(SendEmailInput,email-service.ts:42-68);点明bodyHtml/bodyText是模板字段;加了「错词表探针」把两套词汇钉开,并加 NOT-a-FAIL negativenotify-inbox-delivery(requires / knownGaps,rev 1→2)POST /api/v1/data/sys_account→ 405(managedBy better-auth、apiMethods ['get','list'],405 先于写守卫的 403,sys-account.object.ts:234-241),旧的「给 seeded persona 接一条凭据」配方已关闭;改指 sign-up /admin/create-userflow-connector-picker(fixtures / knownGaps / step,rev 2→3)ResourceEditPage的 artifact-backed 启发式 +flow的allowOrgOverride:false,指明可编辑路径是 console 自己的 create page,并交叉链接 objectui#4308(极性相反那一例才是缺陷)webhook-lifecycle(requires / knownGaps / bulk step / source,rev 3→4)options.multi剥离作为安全边界(rest-server.ts:10461-10492),bulk 条款需用 flowupdate_record/delete_record节点经 api trigger 触发#7753 —
areas/studio-authoring.json(+platform-core.json)(6/6 记录项) ·premise_still_valid: trueorg-override-registry-gate(knownGaps / source,rev 1→2)OS_METADATA_WRITABLE=permission下徽标会清除、编辑器完全可写(GET /meta报overrideSource:'env',protocol.zod.ts:208),两个方向都被证过 → #7637 不得按原文行动draft-publish-lifecycle(step / publish-drafts 条款 / negative,rev 2→3)data.success判(该门 abort 答 200 + success:false),原子性结论保留(abort 后两个名字都 404);状态码之争记为待一次明确裁决的 open ledger 项。⛔ 只记录不裁决,已在 negative 里写明 runner 不得据此判 FAILorg-override-registry-gate(同一次 rev)_diagnostics横幅authoring-validation-not-persisted(knownGaps / negative,rev 1→2)_diagnostics"(设计器对服务端自己的注解做了回读校验),并与真正的 located-error 缺失区分开record-page-roundtrip(automated.stale/ 两条 clause verify / source,rev 1→2)studio-record-page.spec.ts把 Object 控件当 input 填,实际已是role=combobox按钮;studio-editor.spec.ts指向已不存在的 "Layout" 标题 + 一个编辑器正确锁住的 shipped page),附 runner 规则:手工驱动、不得引用其输出、不得把其失败记为本项 FAILplatform-core.metadata-authoring-roundtrip(automated.stalepartial / clause 3 verify,rev 1→2)studio-record-page.spec.ts这一半;dogfood pin 与studio-object-designer.spec.ts明确不受影响#7720 —
docs/qa/platform-checklist/README.md·premise_still_valid: true(#7716 已合并,qa-scratch-authz在 main 上)Item anatomy 补齐 recipe 约定的两半:item-anatomy 代码块新增
fixtures.provisioning = { use, why };新增小节《Area-levelfixtures— one named provisioning recipe, many items》给出 area 级配方块完整形状(title/why/provenance/app/requires/sequence[{step, call, body, expect, source}]/teardown/knownGaps)+ item 侧引用 + 四条设计理由(运行时供给故 teardown 是唯一清理;每个调用引 frameworkfile:line;why是债务标记;opt-in 是把knownGaps改写成 CLOSED-by-recipe 而不是删掉)。option C(教校验器解析provisioning.use)按卡面 deliberately deferred,未做,并在 README 里写明「已推迟」及其后果(拼错的use由 review 而非check:platform-checklist兜住)。验证
node scripts/check-platform-checklist.mjs→ 1 problem,即已知 base 红coverage.json · qa: UNCLASSIFIED(finding:check:platform-checklistis red onmain— the newqaliveness ledger is neither mapped nor waived in coverage.json #7347,并行修复中)。本 diff 引入的问题为零。每个被改动的 item 都 bump 了revision并追加history(校验器的 revision/history 检查要求)。node scripts/check-empty-changeset.mjs→ clean(1 declaring changeset);node scripts/check-changeset-no-major.mjs→ clean。docs/qa/platform-checklist/coverage.json未触碰 ——git diff --stat与本清单 1:1,无该文件行。Changeset / 标签
清单与 README 属 docs,本可走
skip-changeset;但packages/specrider 确实改了已发布的.describe()文本,故附了@objectstack/specpatch 级 changeset(门禁是按标签而非按路径判的,这样两条路都成立)。docs 部分的skip-changeset标签仍归 PM 处理。跨仓 / 越界发现清单
automated.refspecs, and three ledger/route observations #7753 item 6,report-don't-edit):e2e/live/studio-record-page.spec.ts(Object 控件已是role=combobox按钮)与e2e/live/studio-editor.spec.ts("Layout" 标题已移除 + 目标是编辑器正确锁住的 shipped page)需重指向当前 surface。本 PR 未改 objectui 任何文件,只在本仓把 staleness 记下来,止住每轮红跑。请 PM 转 objectui 车道。InvitationSchema.roledoc-comment(同文件 :139,同一缺陷)—— 见上文 Checklist maintenance from the identity-auth QA run (#7663): 5 item/oracle/fixture corrections for docs/qa/platform-checklist #7740 rider 第 1 条。content/docs/references/identity/organization.mdx的两行为手工按生成器渲染路径对齐(本容器无node_modules)—— 见 Checklist maintenance from the identity-auth QA run (#7663): 5 item/oracle/fixture corrections for docs/qa/platform-checklist #7740 rider 第 2 条。⛔ 未 merge、未 auto-merge、未动 merge queue、未改
content/docs/releases/**、未git stash。工作在专用 worktree
objectstack-7740(容器内新建、推送后已回收),未在共享主检出上编辑。Generated by Claude Code
docs(qa,spec): checklist maintenance from four QA runs — identity-aut…