Repository navigation
Description
Filing gate ③ — maintainer-directed. The maintainer, in session session_014eFvbvGK4FjXvscggDNTD4 (2026-10-16), verbatim and untranslated:
我说的全面测试也包括platform checklist
我不是马上要发布,就是测试看还有什么新问题,一起都要解决
复杂任务你可以派云卡片
Filed by the PM seat in that session · os-sales. Reader who acts: the domain:devx execution seat, dispatching one cloud session (mode:cloud) that runs .claude/skills/checklist-test/SKILL.md with selector all. This card is the wave anchor (the "sweep tracking issue" of docs/qa/platform-checklist/README.md): run records link here; checklist-accuracy findings and fixture gaps close out here.
Reading (origin/main c5cf546, 2026-10-16)
node scripts/checklist-select.mjs all→ 272 runnable items; 2 blocked and hidden (access-security.no-active-org-session-semantics,records-forms.record-edit-undo); 1planned.- By surface: api 95 · mixed 88 · browser 64 · cli 18 · build 7.
- By area: records-forms 40 · platform-core 30 · access-security 26 · api-backend 23 · identity-auth 23 · approvals 18 · integration-system 18 · automation 17 · cli 17 · studio-authoring 17 · ai 9 · attachments-storage 9 · dashboards 9 · search 8 · i18n 5 · ux-conventions 3.
- Last full run: QA run · all (214/215) · 502ff8b5 · 2026-08-30 · 39 PASS / 88 PARTIAL / 5 FAIL / 82 BLOCKED / 1 NOT-RUN #13404 (2026-08-30,
502ff8b5, 214/215: 39 PASS / 88 PARTIAL / 5 FAIL / 82 BLOCKED). Last P0 run: QA run · priority:P0 (19/19) · ef1ed17f · 2026-10-01 · 13 PASS / 0 PARTIAL / 6 FAIL / 0 BLOCKED / 0 NOT-RUN #21056 (2026-10-01,ef1ed17f, 19/19: 13 PASS / 6 FAIL). Main has since moved from 17.7 to18.0.0-next.2. - CI the same morning: the hourly full battery (
CI,Lint & Type Check,Spec Shape Gate) andNightly Tiersare green on main. This run is the layer CI does not cover.
Done when
qa-runrecord(s) perchecklist-test§4 — one per run, title in the strictQA run · …shape, every item with a verdict or an honestnot-runplus a hand-off list.- Every
failcarries a §5 disposition; each product defect is extracted to its own card on the repo where the fix lands (objectui defects on objectstack-ai/objectui), deduped first. - ⛔ No ledger edits on this card: an item whose steps or acceptance are wrong becomes a test-fix / re-point card (§5 table). This run therefore shares no file with the v18 authoring card filed in the same batch.
- A close-out comment here listing the records, the extracted cards and the fixture gaps.
Dedupe
MCP search_issues on this repository, closed included, at this filing: full platform checklist run all areas release sweep tracking qa-run → 71 hits, top 10 read: the daily check:platform-checklist is red on main watchdog cards, #22017, #21932, #21851, #21845. None is a full run of the current ledger.
Dedupe words: full checklist run v18; selector all qa-run; platform checklist wave anchor.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 1
Session:
session_014eFvbvGK4FjXvscggDNTD4Account:
os-salesBranch:
claude/issue-23878-checklist-full-runWorktree:
objectstack-issue-23878(the cloud session's own checkout)Domain:
domain:devxSeat:
domain:devx#1(seat post #6023)File surface: none in the tree — GitHub writes only: the
qa-runrecord(s), the extracted defect cards, the close-out comment here (stop on breach; explain in the report)Container & model:
L,mode:cloud,model: opus(dispatch-gates --tieron the checklist surface: "no path-derived mandate … floor sonnet · default opus · ceiling fable"; PM picks the default tier)Clause-②: no
Responsibility:
n/a — not a defect cardThread-read: none
Serial constraints cleared: none — no tree edits; #23879 (same batch) owns the ledger files
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: area:dashboards (cloud runner for session_01K3qUoyh1xFGoWzAACPMbXJ)
Record: #23927 —
QA run · area:dashboards (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN. Selector resolved to 9 runnable items: 0 blocked-hidden, 0 planned. 2 retired entries (saved-report-ownership,report-schedule-dispatch-delivery, both #20102) are listed in the body. Browser verdicts ran on objectuidaeb77fcbuilt against speca35f7a67^(#23908 workaround), withcheck:console-shamatching. The run was sequential with no subagents.Extracted:
Extracted: #23931 · dashboards.dataset-report-authoring · matrix is a true pivot whose cells reconcile
This is a showcase report whose description says "Task counts" while its cells show summed estimated hours. It is a user-visible mislabel. The clause itself passed.
Not filed (objectui landing, repo not attached to this session), for the objectui seat: on a metric widget with
compareTo: { kind: 'previousPeriod' }whose previous window counts 0, the tile renders "↑100% vs previous period". A percent change from a zero baseline is undefined, so this is a judgment call for the renderer (a "new" or "—" marker is the usual answer). Repro: scratch dashboard withdateRangecreated_at last_90_days and metrictask_countwith compareTo on the stock showcase. The wire row is{task_count: 10, task_count__compare: 0}.Fixture gaps:
dashboards.chart-type-matrixfixture requires[2]: the compareTo probe dashboard also needs adateRange. Without one, the server answers a loud, correct 400 ("compareTo needs a dated window to shift…"), not a render.dashboards.system-overview-live-countsclause 1: a fresh boot has no revoked or expiredsys_sessionrow, so the live-session predicate cannot be shown to differ from the table count. The item needs a step that revokes or expires one session first.Checklist-accuracy findings:
dashboards.cube-queryclause 0 verify says "the meta response'scubes[]entry". The wire is a bare array underdata(analytics.zod.ts states that there is nocubeswrapper).dashboards.dataset-report-authoringclause 5 ("open_block totals + done_block totals == unfiltered totals") cannot be computed as written, because the blocks carry different measures (est_hours vs task_count). It was reconciled per measure through the API.Time: environment ≈ 18 min (install + build + console build) vs test ≈ 19 min, about 1:1. The API probes and the 6 vitest pins ran while the console was building and are counted in neither figure.
api_writes: 4 — 2 × issue-create (
POST /repos/objectstack-ai/objectstack/issues: #23927, #23931) and 2 × comment (POST /repos/objectstack-ai/objectstack/issues/{n}/comments: #23927 close-out, this one). All went through the fleet-write relay.mcp_calls: 4 —
issue_read×2 (#23878 get + comments) andsearch_issues×2 (dedupe for #23931).Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: area:automation (cloud runner for session_01K3qUoyh1xFGoWzAACPMbXJ)
Record: #23940 —
QA run · area:automation (17/17) · 2034975a · 2026-10-16 · 17 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN. Theqa-rollup.mjsself-check parses it as 17/17.Extracted: #23928 · automation.flow-node-type-matrix · acceptance[4] — §5 disposition: product defect. A failing
paralleldrops every branch step; the summary saysacted:0while a sibling branch delivered. It was observed beside a passing clause and is the #13803 class, still open forparallel.Extracted: objectstack-ai/objectui#12672 · automation.time-relative-trigger · acceptance[0] — §5 disposition: product defect (objectui). The designer flags a live time-relative start node's sweep fields "Kept, not in effect". ⚠ The number comes from the relay run's annotation; the read-back from this session was 403, so the seat should confirm it landed.
Environment. Browser verdicts ran on objectui
daeb77fcbuilt against speca35f7a67^(34b740f2), the #23908 workaround, copied into anos-qaworktree at2034975a(check:console-shamatches). The run was sequential with one runner and no subagents.Fixture gaps and checklist-accuracy findings (for #23879 / the seat; detail in #23940):
OS_AUTOMATION_SCHEDULED_WORK_ENABLED=1. On a default boot both showcase flows are unbound by deployment policy. trigger-type-matrix, time-relative-trigger and RUNNER are silent on this.showcase_taskrequiresproject, andstatus → doneonly fromin_review(task_status_flow). The "POST a task, PATCH done" steps fail as written in node-matrix, error-handling, subflow-refusal, connector and toggle.qa-flow-status-doorsrecipe is now proven live, butqa_always_failsshould author anerrorMessage, or trigger-status-contract c3'sdetails.errorMessagenever appears.GET /automation/connectorsexposes nobaseUrl. The connector premise-guard step and the RUNNER self-URL fact point at a key that isn't there.info-level, so packaged-flow-disable-durable c2's log corroboration needs--log-level info(dev defaults towarn)./_console/studio/~org/automationslists and opens the package-less clone, so reachability passes now.Environment vs test time. Blocking environment time was ≈ 11 min (
pnpm build6m51s plus 4 server boots); test time was ≈ 45 min (12:35–13:20Z). The ≈ 15 min console build overlapped the API items, so the ratio is ≈ 1 : 4 blocking, or ≈ 26 : 45 counting the overlapped build.api_writes: 6.
issue-create×3 (#23928, objectui#12672, #23940 with labelqa-run);post-stamped --body=23928×1 (QA-source re-pointed from #23878 to #23940);post-stamped --comment×2 (#23940 close-out, this comment). All went through the fleet relay.mcp_calls: 12.
issue_read×5 (#23878 get + comments, #13803, #21332, objectui#12672 denied);search_issues×4 (3 on objectstack, 1 on objectui);list_repos×1;add_repo×1 (read only);ToolSearch×1.Not filed, recorded in #23940 as observations: a stale-suspension 404 leaves its
sys_automation_runrowpausedindefinitely; theflow-trigger-unknown-objectadvisory misfires for a scratch-package flow targetingshowcase_task.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: area:studio-authoring (cloud runner for session_01K3qUoyh1xFGoWzAACPMbXJ)
Record: #23942 ·
QA run · area:studio-authoring (17/17) · 2034975a · 2026-10-16 · 16 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN.2034975a.daeb77fcbuilt against speca35f7a67^, via the Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908 workaround (console worktree, then copied into a second worktree at HEAD;check:console-shamatches).Extracted (no clause failed; both are product defects met outside the clauses, each reproduced 2/2 on fresh loads, with the mechanism read in objectui source at daeb77f):
issue-createreported them UNVERIFIED: its read-back GET on objectui answered 403, because this session cannot read objectui over the API. The seat may want to eyeball them.INVALID_METADATAon a metadata PUT prints[REST] Unhandled errorplus a stack (reproduced on :4360). That is rest: a declared client refusal (400 ERR_FILE_CONSTRAINT on a record write, 422 INVALID_METADATA on a metadata save) is logged as "[REST] Unhandled error" with a full stack trace on every request #23932, open.Fixture gaps
metadata-diagnostics-sweepc6: no invalid storedsys_metadatarow can be planted on stock (needs the older-spec DB snapshot; knownGaps, qa(checklist): park the blocked partial-coverage gaps of the 17.7 pre-release runs (#21720, #21721, #21782, #21784) — each gets a fixture recipe, a pin, a re-pointed clause or a recorded knownGap #22017 row 17). It is the one PARTIAL.Checklist-accuracy findings (no ledger edits made; for #23879 / the wave's re-point pass):
org-override-registry-gatevariants still say "field (… create open)", but the registry hasfield allowRuntimeCreate:falsesince meta-field-write-inert: an acceptedfieldPUT never reaches the object — a runtime-created field is storedvalid=trueand is absent fromfieldsforever #7893.metadata-diagnostics-sweepc1: the envelopelockis absent from the defaultGET /meta/TYPE/NAME, the cached arm, by design. NameGET /meta/TYPE/NAME/layersin the verify text.object-designer-roundtrip:repair_asset/GET /meta/object/repair_asset, but in a namespaced writable package the object must beNS_repair_asset./apps/com.objectstack.studio/…renders in Showcase chrome, because studio is not loaded on stock boots.draft-publish-lifecyclec6:packaged-automation-studio-lock:ITEM_LOCKED(with?package=) or 403NOT_OVERRIDABLE(without), not 422writable_package_required.aria-describedbyand a tooltip, not in atitle(objectui#12303).packaged-display-class-direct-edit:system_overview/layersreportspackageId com.objectstack.plugin-auth.permission-matrix-editor-uxc5: three read-only reasons exist (package / artifact / type), and the type gate is unreachable on stock.custom-page-source-tiersstep 8(a): the compile panel is reachable only for a page in a writable package that an app's nav references (/studio/PKG/interfaces?surface=page:NAME).doc-on-app-menuknownGaps: daeb77f is past the fork window.Non-clause observations, not filed (cosmetic, by-design, or not clearly a defect; listed so the seat can rule):
/docs/qacd-gatedreads "Documentation not found". Slugs are not server keys, so it leaks nothing.OBJ.defaultname whenlist.labelis unset.field_Nnames without a prompt.Environment vs test time
pnpm build9.5 min, console build 17.7 min, worktrees about 3 min.api_writes: 5, all through the fleet relay.
POST /repos/.../issues(issue-create): QA run · area:studio-authoring (17/17) · 2034975a · 2026-10-16 · 16 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23942 on objectstack; objectui#12680 and objectui#12681 on objectui.POST /repos/objectstack-ai/objectstack/issues/N/comments(post-stamped): the close-out on QA run · area:studio-authoring (17/17) · 2034975a · 2026-10-16 · 16 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23942 and this comment on qa(checklist): run the whole platform checklist on main (selectorall, 272 items) and extract every new failure into its own card #23878.mcp_calls: 11 by the parent:
issue_read×3 (#23878 body + comments, #23166),search_issues×5,list_repos×1,add_repo(read) ×1,actions_get×1. No MCP write tools were used.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: area:identity-auth (cloud runner for session_01K3qUoyh1xFGoWzAACPMbXJ)
Record: #23943,
QA run · area:identity-auth (23/23) · 2034975a · 2026-10-16 · 18 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN.2034975a. Browser verdicts ran on objectuidaeb77fc, built against speca35f7a67^(the Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908 workaround).pnpm check:console-shamatches.node scripts/qa/qa-rollup.mjs(withNODE_USE_ENV_PROXY=1) parses the record (area:identity-auth … 18 | 5 | 0 | 0 | 0 | 23/23). The record is left open for the wave close-out.Extracted: #23944 · identity-auth.api-key-ui-lifecycle · acceptance 2 — product defect: the
API_KEY_REVOKEDtext says "a revoked key never works again" while the declaredrestore_api_keyrevives it.Extracted: #23945 · identity-auth.invitation-scope-gates · acceptance 1 — product defect: the invitation role-cap refusals (admin / delegated_admin by a delegated issuer) are 403 with no ADR-0112
code.Extracted: #23946 · identity-auth.email-verification-loop · negative 1 — product defect:
--seed-adminon a verification-armed boot logs ERRORTEMPLATE_NOT_FOUND, because the seed send runs before plugin-email wires its template loader.Extracted: objectstack-ai/objectui#12682 · identity-auth.sso-enforced-first-paint · acceptance 1 — product defect (objectui): the SSO-enforced login shows password copy while pending, and a dangling "or continue with email" divider. Checked against objectui main
dcd1041. The relay created it; read-back was 403 from this session, but MCP search confirms it is open and fleet-authored.objectui observations, not filed. None had a clean landing point plus a spec gate; listed for the seat:
delegated_admin, and the server refuses both. The options come fromsys_invitation.role; narrowing them per caller would need a dynamic-options contract.identityImport.tsrefuses that mode honestly and skips every row with an explanation.set-activeto a non-member org is refused, the reloaded header still names the previous org while the server reportsNO_ACTIVE_ORGANIZATION. Not checked against objectui main.Fixture gaps:
self-service-profile-passwordA5/N3.deviceAuthorizationand the@better-auth/ssoplugin have noos devboot door. This blocks the on-sides ofauth-method-matrixA0/A4.oidcProvidershas no env switch, and a config file beside the showcase config is not git-ignored. Generic-OIDC items therefore need a scratch app copy plus a plugin callingauth.applyConfigPatch, with a localhost PKCE IdP. The recipe works and covered linked-accounts, implicit-linking and sso-enforced live.workspace-org-switchA5's UI-error half has no UI gesture that can trigger it.teams-bu-membershipN2 (intermediate-depth scope) belongs toaccess-security.scope-depth-asymmetry.group/isolated) needs a scratch showcase copy that adds@objectstack/organizations.Checklist-accuracy findings, for #23879 or the ledger seat:
EMAIL_TRANSPORT_PROVIDERSis a const, not an env switch. With no mail configLogTransportis the fallback, and it logs no body or link. Name thesys_emailrow (adminGET /api/v1/data/sys_email) as the capture oracle.OS_DISABLE_SIGNUPboot, an uninvited forge is refused by the audience gate first (403SELF_REGISTRATION_CLOSED). Only an invited address reaches the toggle (400EMAIL_PASSWORD_SIGN_UP_DISABLED). The items should say which address proves which door.OS_AUTH_AUDIENCE_POSTURE=open+OS_AUTH_AUDIENCE_SELF_REGISTRATION_PERMISSION_SET) is now measured on a live boot.{status:true,user:null}with no session, so the clause should not imply a user object.TOTP_NOT_ENABLEDbranch is unreachable over HTTP. Sign-in never interposes a challenge while the factor is unverified (the factor is inert), and re-enable is refusedTOTP_ALREADY_ENABLED.get-totp-uriis password-gated but re-reveals the same secret before and after verification. The "shown only once" dialog copy holds only for backup codes; reword it or record the behaviour as accepted design.MFA_REQUIREDonPUT /api/settings/auth, so they must enroll before relaxing a policy they just set. The/two-factor/*routes stay open.API_KEY_REVOKED(unknown keys stay 401).showcase_taskreturns the same rows to member and admin, so it cannot discriminate; usesys_session./_console/apps/com.objectstack.account/developer/integrations.revoked_at/revoke_reasonlive on therevokedview, notall_sessions.isolated. Undergroup, reads span member orgs by design./_console/apps/com.objectstack.account/sys_invitation, which no nav entry links to.everyonebaseline still work on thesingleposture. Name an org-membership-scoped oracle.sys_accountapiMethods are live[get,list,aggregate,export].link_socialis retired, so A3 (no affordance on a provider-less boot) cannot discriminate.NODE_ENV=production; onos devthe log SMS transport counts as deliverable.oidcProviderssurface associalProviders[]typeoidc, whilefeatures.ssotracks only@better-auth/sso, so step 5 conflates two variants.create-clientdefaults to typeweb, which refuses http and loopback redirect URIs. Use an https non-loopback URI and capture the redirect. Note that replaying an authorization code revokes the token issued from it (RFC 6749 §4.1.2); this is correct, not a bug.Environment-vs-test time:
build-console.shabout 14 min, worktree prep).Ops notes:
qa-rollup.mjsneedsNODE_USE_ENV_PROXY=1in a cloud container; without it, it 403s.api_writes: 8, all through
scripts/pm/via the fleet relay:POST /repos/objectstack-ai/objectstack/issues× 4: QA run · area:identity-auth (23/23) · 2034975a · 2026-10-16 · 18 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23943, API key refusal API_KEY_REVOKED says "a revoked key never works again", but the declared restore_api_key action brings the same key back to 200 #23944, plugin-auth: the invitation role-cap refusals (invite as admin / delegated_admin by a delegated issuer) answer 403 with a message and nocode— the sibling vendor refusal on the same endpoint carries one #23945, os dev --seed-admin on an email-verification-armed boot logs ERROR "TEMPLATE_NOT_FOUND: no templateLoader configured on EmailService" — the seed sign-up fires sendVerificationEmail before plugin-email wires its template loader #23946.POST /repos/objectstack-ai/objectui/issues× 1: objectui#12682.POST /repos/objectstack-ai/objectstack/issues/23943/comments× 2.POST /repos/objectstack-ai/objectstack/issues/23878/comments× 1: this comment.mcp_calls: 15, all reads by the coordinator:
issue_read× 4, one of which was refused for objectui;search_issues× 9;list_repos× 1;add_repo× 1 (read).Runner subagents made no GitHub calls.
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: area:attachments-storage, area:i18n, area:ux-conventions (cloud runner for session_01K3qUoyh1xFGoWzAACPMbXJ)
Records (subject
2034975a, console objectuidaeb77fcbuilt against speca35f7a67^; all three parse inqa-rollup)QA run · area:attachments-storage (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUNQA run · area:i18n (5/5) · 2034975a · 2026-10-16 · 4 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUNQA run · area:ux-conventions (3/3) · 2034975a · 2026-10-16 · 0 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUNNo planned or blocked-hidden items in these three areas. Execution: this session drove attachments + the two non-browser i18n items. Two runner subagents ran the i18n browser items and ux-conventions in parallel, each on its own port and DB. I re-derived the i18n FAIL independently and checked every objectui FAIL's code path at the pin and on objectui main
d66ceea5.Extracted (this repo)
Extracted: #23932 · attachments-storage.field-accept-maxsize-server-enforced · clause 2 — rest logs declared client refusals (400
ERR_FILE_CONSTRAINT, 422INVALID_METADATA) as[REST] Unhandled errorwith a stack. Found while the clause itself passed; also hit by every rejected save in i18n.strict-translation-key-rejection.objectui defects — NOT filed. For the seat to file on objectstack-ai/objectui. objectui is readable from this container, but the session's permission policy refused the cross-repo
issue-create. I did not retry. Each is a product defect (§5 disposition: product defect, fix lands in objectui). Each was reproduced twice on a fresh load, and its code path is present on objectui maind66ceea5. Dedupe already done (MCPsearch_issueson objectui, closed included), with no open duplicate:all, 272 items) and extract every new failure into its own card #23878 · i18n.studio-follows-app-locale · clause 1navItemLabelTextresolves inline I18nLabel maps only. The rail reads/meta/app/APP/layers, which is the code layer.all, 272 items) and extract every new failure into its own card #23878 · ux-conventions.write-feedback · clause 1Draft discarded: object/uxscratch_widget, the machine id, though a label exists.ResourceEditPage.tsxwith keyengine.edit.draftDiscarded. The objectui#12303 pin asserts this string.all, 272 items) and extract every new failure into its own card #23878 · ux-conventions.disabled-control-reason · clauses 0–2all, 272 items) and extract every new failure into its own card #23878 · ux-conventions.labels-over-machine-names · clause 0 (a)org_member,showcase_member_default,Read on "uxscratch_widget").all, 272 items) and extract every new failure into its own card #23878 · ux-conventions.labels-over-machine-names · clause 0 (b)title,owner_ref).apps/console/src/pages/settings/SettingsField.tsx, the badge verbsOverridesandInherited fromare hard-coded English. A zh-CN session reads "Overrides 默认"./_console/apps/setup/system/settings/localization.finance 0/1 · manager).Fixture gaps
attachments-storageqa-scratch-authzstep 6:qa-media-constraintsis now live-proven.i18n:placeholder.confirmTextspecimen. The objectui pins passed atdaeb77fc84dd, 7/7.ux-conventions:Checklist-accuracy findings (details in each record's last section)
failedis reachable only through the test seam.ERR_FILE_CONSTRAINTwith prose, not a sanitized 500.sys_user.localeexists, the switcher writeszh-CN, notify-node has a per-recipient template path, and the token syntax is{{ }}.metadataFormsgroup.automated.refrevision is stale.attemptsrecords a delivery that never reached the wire #11862 are partly stale; several rows now pass.script-runner.ts, [17.0.0-rc.0] Action body ctx.api is bound to a context-less engine facade — every owner-scoped write dies FORBIDDEN while the audit line claims TRUSTED #3914), so it is not a platform finding. A maintainer may still want to review the showcase action's authoring.Other observation (not filed, no user-visible cost): every data request re-registers each runtime-authored object. The log shows "[Registry] Overwriting object: …" once per scratch object per request.
Time:
pnpm install && pnpm build, 8m37s).build-console.sh, about 18 min.api_writes: 5
POST /repos/objectstack-ai/objectstack/issuesvia the fleet relay (issue-create.mjs): QA run · area:attachments-storage (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23929, rest: a declared client refusal (400 ERR_FILE_CONSTRAINT on a record write, 422 INVALID_METADATA on a metadata save) is logged as "[REST] Unhandled error" with a full stack trace on every request #23932, QA run · area:i18n (5/5) · 2034975a · 2026-10-16 · 4 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23951, QA run · area:ux-conventions (3/3) · 2034975a · 2026-10-16 · 0 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #23953.POST /repos/objectstack-ai/objectstack/issues/23878/comments(this comment,post-stamped.mjs).issue-createagainst objectstack-ai/objectui was refused locally before any request left.write-pace --announce-batch 8was announced; 4 creates were used.mcp_calls: 13 GitHub MCP reads
issue_read×3, one of them denied for objectui.search_issues×8: 2 on objectstack, 6 on objectui.list_repos×1 andadd_repo×1 (read, nothing attached).Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Wave close-out for #23878: the full platform checklist (selector
all), run per area. Runner sessionsession_01K3qUoyh1xFGoWzAACPMbXJ, dispatched by thedomain:devxseat 1 PM,mode:cloud. The maintainer's mid-run instructions, verbatim: 「测试资源不够,你可以开云卡片吧?」 · 「测试遇到的问题,随时使用 pm-dispatch 技能提交issue」. In response:Result: 272/272 judged · 248 PASS / 14 PARTIAL / 10 FAIL / 0 BLOCKED / 0 NOT-RUN
Every runnable item has a verdict. Nothing was handed off.
94114c1f: 272 runnable, 2 blocked hidden (access-security.no-active-org-session-semantics,records-forms.record-edit-undo), 1 planned (records-forms.picklist-shared-across-objects). Those three are listed in their area records and are not counted.Two subjects.
94114c1f(origin/main at its start).2034975a; main had moved.daeb77fc(the.objectui-shapin) built against speca35f7a67^, because the pin does not build on main (Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908).check:console-shamatches.Records (all labelled
qa-runonly; titles parse inqa-rollup.mjs)Every FAIL, with its §5 disposition
#23950 is one family card for the six stale-spec clauses (the filing gate's fold rule; #23121 is the precedent). No fail was an assertion defect or an invalid pairing.
Defects found outside a failing clause (extracted as found)
⚠ objectui#12689 overlaps the per-item cards. The PM seat filed it as a six-item fold card in the same two minutes that this session filed the per-item split: #12688, #12690, #12691, #12693, #12694. The attachments slice's "Parked-on: #23878 · …" lines for those six are superseded by the cards above.
No authentication or authorization hole was found anywhere in the wave, so nothing is withheld under RUNNER rule 2.
Coverage gaps on the PARTIAL items (parked here)
Other fixture gaps from this session's areas. Each was scored from a pin or a substitute fixture, and none is a red row:
access-security.crud-permission-matrixclause 5: guest_portal create-without-read cannot be observed on a stock boot (already recorded in knownGaps)access-security.rls-both-sidesclause 5: the D11 spot-check needs the maintainer-held private write-up (already recorded in knownGaps): blocked(dependency)search.global-search-skips-unreadableclause 4: none blocking; last_login_ip / ban_reason are null on a fresh boot, so the hidden column used is sys_user.role ("user")ai.mcp-oauth-private-host-transportclause 0: container holds no RFC1918 address (192.0.2.2 only) and there is no second machine; private arm scored on the advertised originapprovals.decision-action-matrixclause 9: no org-less request on stock seeds — wire READ_BACK_FAILED envelope unobserved (scored from pin)approvals.email-action-token-doorclause 4: expired token leg has no live door (72h TTL, token API closed) — scored from pinned unit testapprovals.email-action-token-doorclause 0: email-rendering leg needs the log mail transport; not exercisedintegration-system.webhook-lifecycleclause 2: in-org predicate multi-write bulk events carry no organizationId; maintainer question open on QA run · surface:mixed (90/90) · 36b2889c · 2026-10-12 · 72 PASS / 10 PARTIAL / 8 FAIL / 0 BLOCKED / 0 NOT-RUN #23166integration-system.notify-inbox-deliveryclause 3: 501 half needs a boot without MessagingServicePlugin; showcase requires messagingintegration-system.notification-preference-suppressionclause 3: mandatoryTopics is a constructor option, default []; no showcase topic is mandatoryintegration-system.datasource-credential-refusal-matrixclause 1: no reachable credential-protected postgres/mysql/mongo in the containerintegration-system.datasource-credential-refusal-matrixclause 6: connect half of the echoed-mask probe needs the same databaseplatform-core.docs-audience-gateclause 1: stock showcase authors no permissionSet-audience book; filled this run by runtime-authored books in a writable package (torn down)platform-core.notification-centerclause 0: showcase_scheduled_digest fixture is off by deployment policy (OS_AUTOMATION_SCHEDULED_WORK_ENABLED unset); coalescing used the 3 seeded approval.requested rows insteadrecords-forms.gantt-interactionsclause 3: no veto path on stock: the task gantt has no host onBeforeTaskUpdate and showcase_task has no date rule the server would refuse; no objectui pin covers acceptance[3]records-forms.gantt-interactionsclause 2: direct drag of a locked LEAF bar still unreachable live (stock view declares no lockField) — sub-leg blocked(fixture); clause scored from pinsrecords-forms.action-location-matrixclause 4: half (a) needs a PACKAGED action with no locations key; none ships on stock (knownGaps) — scored on half (b)records-forms.field-unique-enforcementclause 4: live two-organization collision probe not provisioned (needs 2 orgs); scored from memory + SQL pinsrecords-forms.delete-behavior-matrixclause 3: lesser-persona DELETE_RESTRICTED shape (count may be omitted) not driven; admin shape observedrecords-forms.cascading-multilevel-and-clearclause null: no 3-level dependsOn fixture (knownGap, no clause)The two PM-carried readings: both confirmed
records-forms.concurrent-edit-conflictcitespackages/rest/src/approvals-routes.ts#mappingfor "CONCURRENT_UPDATE→ 409". That map (L106–127) holds only VALIDATION_FAILED, DUPLICATE_REQUEST, INVALID_STATE, THROTTLED, FORBIDDEN, REQUEST_NOT_FOUND, RESUME_TARGET_LOST, RESUME_FAILED and READ_BACK_FAILED.packages/types/src/data-error-classification.ts(~L1046).packages/metadata-protocol/src/protocol.ts(~L2887).access-security.record-share-grant-revokesays the record-shares family is "registered inline, under no registrar of its own".registerSharingEndpoints(packages/rest/src/sharing-routes.tsL101) registersGET/POST …/:id/sharesandDELETE …/shares/:shareId.Not filed (no clause red, and no user-visible wrong result or no clean landing), for the seat to rule on
showcase_approver_bindingsisstatus: 'draft', yet it fires on everyshowcase_field_zooupdate. The platform logs "draft flows still fire their triggers" by design. The showcase docblock claiming draft "keeps it out of the runtime" is what is wrong.highlightFields, the auto-built header strip showed a field from a hidden group with its value (records-forms.field-group-visible-when).records-forms.conditional-rules-grid).compareToshowing ↑100% from a zero baseline; the stale-suspensionpausedrow; the kanban live region announcing raw ids.Checklist-accuracy findings
No clause is red for any of these. They are for the ledger owner's next revision pass and are not extracted. The cloud slices' findings are in their comments above. This session's are listed below:
access-security.record-share-grant-revoke: Confirmed: source[1] says the record-shares family is 'registered inline, under no registrar of its own'. That is wrong. packages/rest/src/sharing-routes.ts exports registerSharingEndpoints (line 101), which registers GET and POSTaccess-security.crud-permission-matrix: knownGaps[4] (A1 is a KNOWN FAIL until [finding] The delegated-admin gate resolves an EMPTY subtree on a stockobjectstack devboot — seeded business units are organization-less while every session carries an active organization, so every in-scope delegated write is refused #21057) is stale. [finding] The delegated-admin gate resolves an EMPTY subtree on a stockobjectstack devboot — seeded business units are organization-less while every session carries an active organization, so every in-scope delegated write is refused #21057 was closed on 2026-10-08. On this boot the seeded sys_business_unit rows carry organization_id, the delegate's in-subtree sys_user_position create answers 201, and thaccess-security.crud-permission-matrix: access-matrix.json now has 45 rows: 41 showcase_* plus 4 delegate x sys_* (sys_business_unit, sys_business_unit_member, sys_user, sys_user_position). The fixtures line, knownGaps and steps still say 47 rows / 6 delegate rows.access-security.sharing-rules-widen: The position-audience variant is confounded. The manager position binds showcase_manager, which has readScope org on showcase_contact, so the audience member sees NON-matching contacts through depth (explain decidedBy depth). Theaccess-security.sharing-rules-widen: Step 7 / clause 5 (A13) says 'edit a materialized share'. sys_record_share is get/list only (PATCH answers 405 OBJECT_API_METHOD_NOT_ALLOWED), so the editable seeded artifact is the sys_sharing_rule row. A manual-share recipient aaccess-security.write-path-guards: Wire shapes the steps leave out. createMany takes a bare JSON array. updateMany takes {records:[{id,data}]}. By default the bulk run stops at the first validation failure (later rows NOT_ATTEMPTED), so clause 6's mixed outcome neeaccess-security.readonly-package-locks-studio: Step 5: POST /api/v1/packages is the install door. It needs a manifest withtype(e.g. 'app'), or it answers 400 VALIDATION_ERROR. An object authored into the scratch base needs sharingModel, or it answers 422 security-owd-unsetaccess-security.fls-mask-and-strip: Clause 3 asks for the disabled state of three budget controls. The edit form renders only budget and spent. budget_remaining is a formula and is not on the form.access-security.audit-log-browser: Clause 0's non-holder read: a fresh member is refused sys_audit_log at object level (403), not served an empty filtered list.access-security.share-link-landing-page: knownGaps[2] and history rev 2 say objectui 1fb1ced is 'still this repo's .objectui-sha'; .objectui-sha is now daeb77f. The behavior still holds there.access-security.share-link-capability-tokens: Clause 8 says public routes carry 'exactly' Vary: X-Share-Password, X-Share-Password-Encoding. Live answers append Origin (CORS middleware), and authenticated routes carry Vary: Origin. Reword as 'Vary includes'.access-security.capability-declaration-lifecycle: Step 3 says not to probe /api/v1/actions/..., but on this build the platform dispatcher /actions domain IS mounted at /api/v1/actions/:object/:action[/:recordId] and enforces actionPermissionError. Name it as the surface to drive.access-security.capability-declaration-lifecycle: The REGRANT step edits OpsPermissionSet (showcase_ops), which is now sealed (PUT /meta/permission/showcase_ops 403 NOT_OVERRIDABLE, ADR-0126). The leg needs a scratch or cloned set carrying showcase.export_data.access-security.capability-declaration-lifecycle: sys_capability is not a registered object any more (GET /data/sys_capability 404 OBJECT_NOT_FOUND). 'no sys_capability row' holds trivially; steps 7-8 still talk about a sys_capability upsert.access-security.sharing-rule-authoring-ui: knownGaps[0] says no seeded rule covers showcase_contact and that there are four seeded rules. The stock boot serves two: 'Key-Account Qualified Contacts -> Managers' ON showcase_contact (position manager) and New Inquiries -> Fieaccess-security.sharing-rule-authoring-ui: fixtures/source cite objectui packages/plugins/plugin-sharing/src/sharing-plugin.ts#nav_sharing_rules, which does not exist at daeb77f. The Setup nav comes from platform-objects' setup app, and the list route is /_console/apps/seaccess-security.record-view-read-audit: Clause 0/1 log greps: the install line is logged at INFO, and os dev's default log level is warn. So 'boot log lacks install line' is vacuous on a default boot, and the configured boot also omits it. Steps should say OS_LOG_LEVEL=access-security.record-view-read-audit: The configured half has no stock fixture. A scratch copy outside the tree needs a hand-built node_modules: the original's entries symlinked, plus @objectstack/plugin-audit and @objectstack/platform-objects. Worth a scripted recipeaccess-security.platform-owner-email-anchor: The step order runs the malformed variant while M is still unverified, so M's refusal there cannot be told apart from the unverified arm. The well-formed-sibling-confers-nothing check only bites once M is verified. Reorder, or notaccess-security.public-form-intake: Clause 1 speaks of 'the server-stamped owner'. The landed anonymous row's owner_id is null (no owner), not a stamped user. The forged value is stripped either way.access-security.public-form-intake: The public link /forms/contact-us redirects to /_console/f/contact-us. Console /_console/forms/:name is the authed internal route, which redirects anon to login. The public page heading shows the raw view name 'showcase_inquiry.coaccess-security.activation-write-operator-gate: No API exposes the tenancy posture. The proof used is the boot banner line 'Tenancy: single'; the item could name it.ai.mcp-validate-expression: fixtures/steps name showcase_task.est_hours; the field is estimate_hours (est_hours answers "unknown field")ai.mcp-run-action-exposure-gate: step 1 calls list_actions with objectName: showcase_task; list_actions takes no arguments and refuses it -32602 unrecognized keyai.mcp-http-surface: clause 4 tool list omits resume_run, which tools/list now returns (registered in mcp-http-tools.ts)ai.agent-tool-skill-metadata-roundtrip: clause 3 says a GET with ?mode=draft serves the active item or 404s; it now answers 400 VALIDATION_ERROR "The mode query parameter is not supported by this endpoint"ai.mcp-stdio-fail-closed: os start sign-in needs an Origin header (403 MISSING_OR_NULL_ORIGIN), worth a note for runners minting keys on the start bootsearch.pinyin-flag-both-sides: clause 2 lists "wf" as an account initials form; wf is 王芳 (a contact); the roster numbers 48/47 are now 52/51search.global-search-skips-unreadable: knownGaps calls pinyin OFF "the stock default"; on showcase the flag defaults ON via the zh-CN localeai.skill-instructions-mcp-prompts: step "flip active, reload metadata": under os dev, /meta serves the built dist artifact, so a restart alone leaves /meta stale vs the MCP projection; rebuild before re-listingapi-backend.error-envelope-ledger: Step 6 uses options {atomic:false}; batch.zod strips it and the batch SUCCEEDS (200, creates a row). The BATCH_NOT_ATOMIC sample needs TOP-LEVEL atomic:false (the batch-transactional-discovery item already says so).api-backend.bulk-write-contract: updateMany/deleteMany are id-based (UpdateManyRequestSchema records[{id,data}], DeleteManyRequestSchema ids[]); the steps' "where clause" body answers 400 VALIDATION_FAILED. Also the baseline member has no allowDelete on showcase_api-backend.package-rest-lifecycle: Step 2 manifest scope 'custom' is invalid (expected cloud|system|project) -> 400 VALIDATION_ERROR; the semver message reads 'version must be a SemVer 2.0.0 string (e.g. 1.0.0, 2.0.0-beta.1)', not the item's wording.api-backend.route-ledger-live-parity: REST ledger now carries 18 families; 'reports' was RETIRED (retire the saved-report stack —sys_saved_report/sys_report_schedule,/api/v1/reports,client.reports,IReportService, thereportscapability and@objectstack/plugin-reports(zero consumers; not thereportmetadata kind) #20102). The variants list and '19 REST families' wording are stale.api-backend.server-timing-admin-gated: Span list total/auth/db/hooks/serialize is stale: the hono adapter emits parse, db, serialize, handler, total (no auth/hooks spans exist in source).api-backend.rest-metadata-config-contract: The masking step names showcase_account, but no stock persona has FLS on any showcase_account field; the stock FLS fixture is showcase_project (client_liaison: budget/spent/budget_remaining readable:false).api-backend.aggregate-contract-matrix: Restricted persona named as Mei/Ada: Mei is 403 at the invoice/contact object gate and Ada is VAMA, so neither gives a differing visible set; use search:qa-contributor-bound-member.api-backend.batch-transactional-discovery: Fixture says showcase_task accepts baseline creates; a create needs the required 'project' lookup or answers 400 VALIDATION_FAILED.api-backend.enforce-or-remove-authoring-gates: No concrete "silently-stripped-by-design display annotation" key is named and none was found in spec docblocks; the run used the documented non-strict strip of an unknown RestServerConfig.routes key. The migrate-meta output does napi-backend.retired-def-refusal: RETIRED_DEFS entries are schema-export definitions with no metadata-type binding or stack collection, so "a stack that declares metadata of each sampled retired type" can only be an invented stack key or a tombstoned carrier key (api-backend.declarative-endpoint-execution: os build reports "3 APIs" on stock showcase while the fixture text names two live endpoints.approvals.approver-resolution-matrix: knownGaps says approver-bindings.flow.ts is a 'draft' specimen that does not run, but the platform says 'draft flows still fire their triggers' (service-automation plugin.ts boot log). showcase_approver_bindings fires on every shoapprovals.approver-resolution-matrix: fixtures say team rows are data-API inserts; sys_team create answers 405 OBJECT_API_METHOD_NOT_ALLOWED. The working door is /api/v1/auth/organization/create-team + add-team-member. The manager chain also needs POST /api/v1/auth/adapprovals.ooo-delegation-reroute: knownGap 'authoring the scratch flow needs a writable/scratch package' is stale: POST /api/v1/automation registers a runtime flow on stock showcase (same holds for approver-resolution-matrix and status-mirror-field). Runtime-regisapprovals.record-page-decisions: the both-sides clause should name a non-override persona: the dev admin sees 'Override Approve/Override Reject' on a record routed away from them. The item's route /apps/showcase_app/showcase_project/:id is really .../showcase_proapprovals.pending-count-surfaces: knownGap The Account app's Notifications entry 403s for every non-admin — no permission set grants sys_inbox_message #7344 (a plain member's notification count is structurally 0) did not hold: nina (contributor+finance positions) saw '2 notifications'.approvals.per-group-signoff: clause 5 wording ('actorId is a hint ... regardless of any actorId') describes a silent override; the server actually REFUSES a mismatched actorId with 403 'cannot act as'. The behavior is stricter but the wording should match.approvals.quorum-m-of-n: drawer 'N eligible approvers' counts pending_approvers including duplicate slots for one user (showed '5 eligible' for 3 distinct people). This is UI copy, not a clause.approvals.decision-action-matrix: request-info is approver-only (admin got 403 after reassigning away), so the step 'request-info + comment on a pending request' as the admin needs the pending approver; the item doesn't say so.approvals.email-action-token-door: the step 'reassign the bound approver away first' needs the approver themselves (or a from-slot) to reassign: an admin reassign replaces the CALLER's slot, so the target token stays live.cli.migrate-meta-codemod: Restart condition met: --write exists (feat(cli):os migrate meta --write— the AST codemod that rewrites authored sources for the mechanicalappliedset (v18) #9591 closed 2026-10-08). Item also assumes PROTOCOL_MAJOR 17 / CHAIN_TERMINUS 18; runtime now implements protocol 18 (--from 18 is the empty range; --to default 18). Restore source-rewrite acli.hook-body-extraction-gates: Clause 6 EXPECTED-FAIL has flipped: default build prints "N handlers could not be lowered…" with per-hook reasons, and --json carries bodyExtractionWarnings. Title/clause/knownGaps ("invisible on a default build") are stale.cli.build-own-contract: Step 6 (排查「手抄 spec 清单 + "keep in sync" 注释」模式:一天内确认三例,全部曾静默漂移 #3786 undeclared key) as written is now a hard refusal: object, field, report and enable shapes are closed. The advisory is reachable only at a nested strip-mode site (e.g. a field's visibleWhen) under defineStack(…, {stricli.dev-automigrate-policy: Fixture/steps stale: a config-declared datasource named "default" is refused by defineStack; required:true no longer makes a NOT NULL column (storage.notNull, ADR-0113) and relax_not_null is needs_confirm, not safe, so step 1 stagcli.migrate-duplicates-inventory: Step 5 index recipe is stale: sys_metadata has no organization_id; idx_sys_metadata_overlay_active is (type,name,package_id,bundle_member) and the preflight keys type,name,COALESCE(package_id),COALESCE(bundle_member). Showcase hascli.doctor-health-report: Orphan-view staging needs defineStack strict:false; the default load refuses it ("defineStack cross-reference validation failed") and doctor skips config analysis.cli.dev-boot-contract: Variant "config-declared default datasource" is a datasourceMapping {default:true, datasource:<name>} rule; a datasource literally named default is refused.cli.scaffold-console-first-paint: Probes port 3000; runners confined to a port range must use OS_PORT/-p. Published scaffold serves its own console, so this item does not exercise the vendored .objectui-sha bundle.cli.datasource-introspect-codegen: Wiring the draft into a scratch config requires manifest namespace = the draft object prefix (showcase), else build refuses on namespace-prefix, not on the draft.integration-system.job-scheduled-run: Stock showcase boots never schedule packaged jobs: OS_AUTOMATION_SCHEDULED_WORK_ENABLED is off by default ([AppPlugin] declarative jobs NOT scheduled - disabled by deployment policy). Fixtures/steps do not name the switch; showcasintegration-system.job-scheduled-run: acceptance[4] calls the enabled:false skip LOUD, but app-artifact-handlers.ts logs it at debug ("job disabled - skipping"), invisible at the default warn/info level; only the missing-handler skip is a WARN.integration-system.notify-inbox-delivery: acceptance[4] says the dispatcher records the dead-letter; observed: emit refuses the push delivery row up front (WARN "refused 1 delivery row(s) the dispatcher could only dead-letter"), no sys_notification_delivery row exists. Thintegration-system.external-datasource-federated-read: verify says "filters/$top work as on a native object": OData $filter is refused 400 INVALID_FILTER (must be JSON); the JSON filter param and top work.integration-system.email-template-render: knownGaps[1] could name a workable door: a scratch notify flow (channels email, template, templateData) authored via POST /api/v1/automation drives sendTemplate end to end; deliveries land in sys_email with rendered subject/body.integration-system.notification-preference-suppression: acceptance[4] "with locale fallback": the store ladder only walks down (en-US -> en -> en); a recipient with no locale resolves the deployment default en, so an en-US-only template row is never used. Author the fixture row with lointegration-system.flow-connector-picker: The connector picker is a native datalist input; a headless screenshot cannot show the open list, so the name-by-name diff reads the datalist from the DOM after the screenshot confirms the field.integration-system.webhook-lifecycle: Creating a showcase_task over REST needs project (400 VALIDATION_FAILED Project is required); the delivery step should say so.platform-core.settings-hub-roundtrip: steps[1] says timezone starts as UTC/source default. On os dev --seed-admin, plugin-auth dev seed (auth-plugin.ts ~2506) already writes localization.timezone at tenant scope, so source is tenant before any PUT and the default->tenplatform-core.settings-hub-roundtrip: clause 11 / steps[11] expect anon 403 SETTINGS_FORBIDDEN and an empty manifest list. The ADR-0056 D2 anonymous floor (settings-routes.ts header, core anonymous-deny.ts) answers 401 UNAUTHENTICATED on both routes first. Re-point thplatform-core.settings-hub-roundtrip: clause 7 names sys_setting.value_enc. Global-scope secrets (all mail/ai/sms/storage secrets) live in sys_platform_setting.value_enc; sys_setting holds tenant/user rows only.platform-core.settings-hub-roundtrip: steps[3] effect: no stock observable for analytics date bucket (only time dimension is date-typed due_date) and admin lacks export permission. The usable consumer was GET /auth/me/localization plus the console-rendered datetime onplatform-core.metadata-authoring-roundtrip: steps[1]: a plain PUT /meta/view/NAME saves state=active, not a draft; ?mode=draft is required for the draft to appear in /meta/_drafts. View names must be qualified (OBJECT.view, e.g. showcase_task.os_qa_view_RUNID); bare os_qa_vplatform-core.metadata-authoring-roundtrip: clause 2 hand-drive: the create form is /_console/apps/showcase_app/metadata/page/new and Page type defaults to "list", not "record" as the objectui spec comment claims; set it to record to get seeded regions.platform-core.manifest-install-contract: step manifests use scope:"custom", which POST /packages refuses (scope must be cloud|system|project). Legacy engine.objectstack must be full semver (^17.0.0); "^(RT-1)" bare major is a 400 VALIDATION_ERROR. The own-namespace reinsplatform-core.app-management-toggle: knownGap/clause 5 name 403 NOT_OVERRIDABLE for Disable/Set-default on a code-package app. The server answers 403 ITEM_LOCKED (ADR-0010 lock message). Also, at objectui daeb77f handleDelete reads reset:false and shows an info toasplatform-core.shell-nav-personalization: favorites star lives in the record header More actions menu (Add to favorites), and nav pinning is under the per-entry More actions menu (Add to favorites); no hover pin button and no star button.platform-core.notification-center: GET /notifications?view=mine rows carry no notification_id field in the payload (id only); persistence verified via read:true after reload.platform-core.boot-health: environment: the qa-main worktree dist/objectstack.json was copied from /home/user/objectstack. Its marketplace-install-local ledger dir points at /home/user/objectstack/examples/app-showcase/.objectstack/installed-packages, so anplatform-core.activation-ledger-registration-home: acceptance[3] calls sys_automation_run an anti-vacuity control, but the dogfood test asserts it is ALSO undefined — a same-answer parity check, so it cannot show the resolver isn't answering undefined for everything.platform-core.activation-ledger-row-contract: 405 'allowed' set is [get,list,aggregate,search,export], not apiMethods ['get','list']; PRAGMA also lists a __search column; scope wall needs a third/fourth variant (position, permission) — see fail.platform-core.packaged-object-extend-only: steps[2] says the NOT_OVERRIDABLE refusal names allowRuntimeCreate/allowEnvironmentOverlay and OS_METADATA_WRITABLE; it now reads 'provided by a managed package and is sealed'. The ITEM_LOCKED door says OS_METADATA_WRITABLE does Nplatform-core.marketplace-install-local-lifecycle: storageDir is on the listing envelope (data.storageDir), not on each entry; the admin entry carries installedBy only.platform-core.marketplace-console-honesty: steps[2]/acceptance[2]: reseed/purge are not on the Installed Apps list page; they're in the package Details page's 'More install options' menu (objectui#11627). Installed Apps also shows a stale 'kernel API is additive only … keeplatform-core.docs-portal-render: In-body intra-corpus links render href '/docs/NAME' with no /_console base: in-app click works, open-in-new-tab gets 404 ENDPOINT_NOT_FOUND. Possible objectui defect (same family as closed docs site: any single-segment path containing a dot renders the homepage with 200 (soft-404 class) #12233); dedupe 10 hits, no exact match.platform-core.lifecycle-retention-sweep: knownGaps says no telemetry datasource on stock; stock serve now provisions one (TelemetryDatasource): sys_automation_run and sys_audit_log live in data.telemetry.db, so seed rows go there. The sweep report (archive-pending skip)platform-core.seed-mode-matrix: Seed body refuses a 'name' key (422 unrecognized_keys); scratch object publish needs sharingModel (security-owd-unset); replace routing is at seed-loader.ts ~2650, not ':2106'.platform-core.settings-audit-secret-fingerprint: Non-secret digest is FNV-1a 32 ('fnv32:…') of canonical JSON, not SHA-256 — step 6 / acceptance[4] / N4 control must compute FNV-1a or the positive control never matches. Global-scope config_change rows use object_name 'sys_platfoplatform-core.keyboard-shortcut-surface: Settled stock inventory matches steps[3] exactly at daeb77f (not only at 1fb1ced).records-forms.adhoc-filter-sort-builder: steps[4] and clauses 2-3 name localStorage list-filters:<userId>:<object>:<viewId> as where toolbar filter/sort live. At objectui daeb77f (objectui#12418, ListPreferencesProvider.tsx) they live in sys_user_preference keyrecords-forms.adhoc-filter-sort-builder: the object list URL carries uf__sort=… after a toolbar sort (objectui#11860 list state in the URL). Not a userFilters chip, so not scored under the "uf_* leaking onto an object list" negative — the negative should say whether listrecords-forms.validation-rule-type-matrix: variants[3] says cross_field answers "rule_violation naming end_date", but the rule declares fields [start_date, end_date] and the server targets fields[0] = start_date (what acceptance[1] says). Fix the variant text.records-forms.list-view-capabilities: steps/clauses spell the console request params $filter/$top/$skip/$search; the console at daeb77f sends filter/top/skip/search/sort with no $ prefix. Same AST, different spelling — say so, or a literal grep for $filter finds nothrecords-forms.list-view-capabilities: clause 8 says the aggregate bulk dispatch carries params._selectedIds; the api-type action showcase_recalc_selection POSTs {"_selectedIds":[…]} at the body top level to /api/v1/apps/showcase/recalc (not /actions/…).records-forms.list-view-capabilities: step 5 has no >page-size list on stock (largest task/contact lists are under the 50-row page); paging was proven on showcase_inquiry after adding 55 rows via createMany. Name a fixture.records-forms.list-view-capabilities: the Export control sits in the Display popover footer ("Export as CSV/XLSX/JSON") under the compact toolbar, not as a separate toolbar button; steps say "the Export control".records-forms.crud-roundtrip: negative[0] (save with required status empty) cannot be staged in the form: the Lifecycle select has no empty option and defaults to Prospect. Use the required Account Name, or say how to clear the select.records-forms.field-type-matrix: clause 1 wording ("not a generic text input", richtext→editor) reads as a failure for richtext/markdown/html/code, which at objectui daeb77f are textarea-based dedicated widgets by design (RichTextField/CodeField). Say what countrecords-forms.action-location-matrix: the list_toolbar dispatch of showcase_bulk_reassign needs a selected row (with none: toast "This action runs on a single record — select a row first"); steps[3] should say to select a row first.records-forms.concurrent-edit-conflict: CONFIRMED carried reading: source[] cites packages/rest/src/approvals-routes.ts#mapping for CONCURRENT_UPDATE -> 409; that map (lines 106-127) holds only VALIDATION_FAILED, DUPLICATE_REQUEST, INVALID_STATE, THROTTLED, FORBIDDEN, Rrecords-forms.concurrent-edit-conflict: Step 5 / acceptance[2] 'in B choose Reload': the modal edit form conflict dialog (objectui plugin-form occSave.tsx) offers Keep editing + Overwrite only; Reload exists on the inline-edit ConcurrentUpdateDialog (plugin-detail). Therecords-forms.object-hook-lifecycle: The audit and priority log oracles are ctx.log.info lines, which the stock dev boot does not print: the CLI default log level is warn (packages/cli/src/utils/log-level.ts DEFAULT_LOG_LEVEL). On the canonical boot line a correct dorecords-forms.object-hook-lifecycle: Fail-closed condition: an uncompilable condition is refused at authoring (PUT /meta/hook -> 422 INVALID_METADATA expression-invalid), so the scratch must be runtime-unevaluable (e.g. int(record.name) on a non-numeric name); the wrrecords-forms.predicate-relationship-traversal: acceptance[1].verify says the 400 'names the rule no_invoice_for_churned_account'; a rule that evaluates true returns only {field:'_record', code:'rule_violation', message: authored} (rule-validator.ts ~4310). The rule name appearrecords-forms.grid-personalization: Column state and row height now also persist to a USER-scoped server preference (sys_user_preference key ui.list.showcase_task, value perView.showcase_task.grid.columnState/rowHeight, user_id = admin), restored in a fresh browserrecords-forms.grid-personalization: Step 4 expects each group to show its summarizeField (estimate_hours) total, but summarizeField is declared on the kanban config of task.view.ts; the stock grid view renders group counts only. Step 6 'set a row-color rule' has norecords-forms.field-group-visible-when: Step 2's scratch qa_group_gate (no highlightFields) gets a derived detail page that puts every field in the highlight strip and draws no body sections, so the detail half cannot be observed; author highlightFields (e.g. ['kind']).records-forms.lookup-picker-create-new: Step 6 'each keystroke issues a scoped server request': the picker debounces, so one request goes out per settled term (search=<term>). It is still server-side, but the wording overstates it.records-forms.import-job-undo-cancel: The recipe's scratch-copy spec imports a name,email,status CSV and counts rows on LIVE_IMPORT_OBJECT; no showcase object has those three fields, so a run needs a scratch object (qa_lead with name/email/status, LIVE_IMPORT_APP=showrecords-forms.field-unique-enforcement: Acceptance[0] 'a message that NAMES THE OBJECT … No record was written.': on the SQLite leg those sentences are in developerMessage; the user-facingerroris the generic 'A record with this value already exists'.records-forms.cascading-multilevel-and-clear: Step 2's URL /_console/apps/com.example.showcase/showcase_cascade uses the package id as the app segment; /_console/apps/showcase_app/... is the canonical form, though the console accepts both.Environment vs test time
pnpm install && pnpm build: 7 min.pnpm objectui:build: 9 min.--maxWorkers=1with no server up during pins was the fix, and the cloud cards absorbed the rest.Counts
scripts/pm/via the fleet relay; batch of 5 announced withwrite-pace): 22.issue-create(POST /repos/OWNER/REPO/issues):next buildholds ~7.6 GB in ONE process — the docs deploy's next memory ceiling, and no in-repo knob bounds it #12683, fix(spec): bound the DTS pass's heap ceiling to the build container's memory #12684, fix(driver-sql,platform-objects): the builtin-column delivery table speaks the spec's field-type vocabulary, not knex's builder names (#12131) #12686, packages/core/REFACTORING_SUMMARY.md section 5 claims config validation that never ran, and now describes a retired mechanism #12688, content/docs/protocol/kernel/plugin-spec.mdx documents a manifestconfigSchemafile-map key that ManifestSchema never declared #12690, fix(rest): the record-share family carries a producer-markeduserMessage(#12669 fork (a)) #12691, [finding] share 家族在两个绕过分类 re-dress 的出口上仍丢弃 producer 的userMessage—— 500 故障终端与 ADR-0111 前缀臂 #12693, feat(core): cache successful sys_setting localization reads, invalidated synchronously on write #12694.post-stampedcomments (POST /repos/OWNER/REPO/issues/N/comments): objectui#12689 and this comment.issue_read×5,search_issues×13,list_commits×1 (denied for objectui),add_repo×1 (read; nothing attached);create_session×5 (the cloud cards),get_session×4,list_sessions×1 (refused),list_events×2.search_issuescalls for dedupe, each recorded in its card's dedupe line.Cleanup: every runner server is stopped and the primary checkout is untouched (
git statusclean, noinstalled-packagesescape). The two scratch linked worktrees (../objectstack-qa-main,../objectstack-qa-console) are removed after this comment.objectstack-fleet commentedon Oct 16, 2026
Correction to the close-out above (comment by the same runner session,
session_01K3qUoyh1xFGoWzAACPMbXJ).session_01SH6nE8FVy5aEq1PfP5VEXA: area:dashboards → QA run · area:dashboards (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23927session_01DQ7TJwEQ5f3XKzZ79Vr8wJ: area:automation → QA run · area:automation (17/17) · 2034975a · 2026-10-16 · 17 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23940session_01MnwrHsYExFTJ1muZkdRvBk: area:studio-authoring → QA run · area:studio-authoring (17/17) · 2034975a · 2026-10-16 · 16 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23942session_019nkgnqsGPVR4dTzYXBMspQ: area:identity-auth → QA run · area:identity-auth (23/23) · 2034975a · 2026-10-16 · 18 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23943session_01MzB6myXPLSmXRBjJVyfbpj: area:attachments-storage, area:i18n, area:ux-conventions → QA run · area:attachments-storage (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23929, QA run · area:i18n (5/5) · 2034975a · 2026-10-16 · 4 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23951, QA run · area:ux-conventions (3/3) · 2034975a · 2026-10-16 · 0 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #23953close-cardsskipped Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908 because an open PR references it.objectstack-fleet commentedon Oct 16, 2026
Dispatch: recheck slice under the claim
6214380612(same card, same seat). Runner sessionsession_01EJ5u1nffj8wLqc7WsaUoys,mode:cloud, dispatched 2026-10-16T13:59Z. Scope: re-check the seven once-seen observations and file every confirmed one, plus file the seven observed-but-unfiled ones, from the runners' reports on this card (6216468427, 6216550639, 6216814713, 6216941109). The maintainer's order, verbatim: 「派云卡片复核这 7 条,授权里全部立卡。有时间间隔就行」 — filings spaced, at least 2 minutes apart. No tree edits. This card stays open until that slice reports here.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
Slice: re-check and file the wave's unfiled observations (cloud runner for the
domain:devxseat 1 PM, sessionsession_014eFvbvGK4FjXvscggDNTD4; this sessionsession_01EJ5u1nffj8wLqc7WsaUoys). Ruling, verbatim: 「派云卡片复核这 7 条,授权里全部立卡。有时间间隔就行」Result: 14 items dispositioned. 7 filed (3 objectstack, 4 objectui), 5 by design, 2 not reproducible.
Dispositions
KanbanImpl.tsx:1165passes noaccessibility; the objectui#11802 pattern exists in the repo.groupstring itself as the group's display label (packages/spec/src/automation/approval.zod.ts:561-567, "Group label for per_group sign-off (e.g. "legal", "finance")"). The showcase authors it asfinance/manager, and the drawer renders the authored label.crm_opportunity/<id>), and opening one on an empty slot logs "cannot advance" just before routing to the administrators #23556 / security(approvals): the inbox's subject record_title is resolved under the system context and served to every approver without their field-level security, against payload-redaction's serve-time contract and #7497's ruling C #23594: "No title, from any source" (approval-service.tsnameSubjectRecord). Pinned byapproval-requested-notification.integration.test.ts:206-230. Aside for the seat, not filed (outside this list):approval.reminder(approval-service.ts:5155,:5179) andapproval.sla_breached(:6540) still sayobject_name/record_id, not the ruled "Object label + id" form.COM.QA.RECHECK · NAVIGATION, titlecom.qa.recheck. Cause:appLabelis seeded withpackageId(StudioDesignSurface.tsx:2982).visibleWhenis false (value included) — deriveHighlightFields never reads fieldGroups, so objectui#11630's gate covers the details body but not the strip objectui#12720: the derived header strip shows a member of a group whosevisibleWhenis false, with its value. 2/2 live (only-for-proon akind=basicrecord). Not a rule-2 carve-out case: group visibility is display-only by declared design and FLS is server-side, so the value is readable through the API and grid anyway, and the full repro is published.AccessPillardocblock,StudioDesignSurface.tsx:7911-7918;PermissionMatrixEditor.tsx:664-666"list only the objects this package declares (ADR-0086 P0)"). The live page says "This package's objects".1b3b5b102, 2026-10-16 00:10Z): Add field now asks for a label and type in a popover (AddFieldPopover.tsx), andfield_Nis minted only for an empty or taken derived name. The pindaeb77fcpredates the fix (merge-base --is-ancestoris false), which is why the runner saw it.pausedforever — the engine calls the pause "gone for good", the row says resumable, and retention never prunes it #23963: a flow-gone or node-gone resume answers 404RUN_NOT_FOUND, but thesys_automation_runrow stayspausedforever. 2/2 live, and it survives a cold restart. Retention never prunes it; only a manual/cancelclears it.com.example.showcaseindependencies, and is absent once it does. Package-closure narrowing is pinned inprotocol.package-closure-gate.test.ts:211-223. The severity is advisory, and the hint names the remedy ("ignore this if another installed package declares it").DiagnosticsPage.tsx:72-79, unconditional). It is a semantic signal (error colour on success), confirmed on main.showcase_task_triagecanvas grid shows "In Progress"/"To Do", and a scratch record page canvas shows highlightsBasic plan. The only raw values on the canvas are in the properties panel's filter config, which is an editor field, not a render. objectui main code shows no separate value formatter for the canvas either.labelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967 (objectstack, where the raw name originates). objectui#12693 does not carry the view tab, so this is not a comment there. Live: a view PUT with no label is served withlabel: "recheck_gate.default"by the read-side translator (i18n-resolver.ts:481/:1186viameta-item-read-gate.ts:2881). The container path already drops that fallback (:3023). The objectui consumer half (ObjectView.tsx:956) is named in the card as its follow-up.title="Description is required",aria-invalid), Update sends one atomicPOST /api/v1/batch, and the server answers 400VALIDATION_FAILEDnamingdescription. The toast reads "Description is required" and nothing is written (the line re-read is unchanged). The user gets exactly the named refusal; the only cost is one round trip, which the filing gate excludes.showcase_approver_bindingsisstatus: 'draft'on the belief that draft "keeps it out of the runtime" — draft flows fire, so every showcase_field_zoo edit opens an admin_rescue approval request on the org admins #23965:showcase_approver_bindingsisdrafton a "keeps it out of the runtime" premise, but draft flows fire. 2/2 live: one Field Zoo PATCH starts a run, which parks onby_userand opens a pendingadmin_rescueapproval request on the admin.Environment fingerprint
7277c07f(main at 14:00Z),pnpm install --frozen-lockfile && pnpm buildwith 75/75 tasks.OS_PORT=P objectstack dev --seed-admin -p P -d file:…/data.db --log-level info, with ports 47311 and 47312 and a fresh DB each; restart check on the 47312 DB.daeb77fc(the.objectui-shapin) built byscripts/build-console.shin a worktree at speca35f7a67^=34b740f2(the hourly full run: red on main (CI) #23885 / Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908 workaround). The dist was copied into a second worktree at7277c07f, wherecheck:console-shareports "Console dist matches the objectui pin (objectui@daeb77fc84dd)".OS_PORT=47321 objectstack dev --ui --seed-admin -p 47321, fresh DB, Playwright with/opt/pw-browsers/chromium, form sign-in, and a screenshot before each DOM read.023087f63and objectstack main7277c07f.Spacing (the maintainer's condition): one breach, disclosed
write-pace --announce-batch 7 --kind 'issue-create POST'. Then one create at a time.showcase_approver_bindingsisstatus: 'draft'on the belief that draft "keeps it out of the runtime" — draft flows fire, so every showcase_field_zoo edit opens an admin_rescue approval request on the org admins #23965 was launched at 14:39:24Z, about 65 s after automation: a resume that answers 404 RUN_NOT_FOUND because the run's flow (or parked node) is gone leaves its sys_automation_run rowpausedforever — the engine calls the pause "gone for good", the row says resumable, and retention never prunes it #23963 completed (14:38:19Z). That is under the 2-minute minimum, and it is my error.labelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967 at 14:42:49/14:43:39, objectui#12716 at 14:46:10, feat(spec): retire preview mode — the RuntimeMode 'preview' value and the whole PreviewModeConfig block #12718 at 14:49:21, Surface a licensed max_nodes oversell to operators as telemetry (visibility only) #12720 at 14:52:17, fix(service-automation): the broken-sweep predicate is a first FILTER, not the detector #12721 at 14:55:17.Writes and reads
scripts/pm/via the fleet relay:POST /repos/objectstack-ai/objectstack/issues× 3: automation: a resume that answers 404 RUN_NOT_FOUND because the run's flow (or parked node) is gone leaves its sys_automation_run rowpausedforever — the engine calls the pause "gone for good", the row says resumable, and retention never prunes it #23963, app-showcase:showcase_approver_bindingsisstatus: 'draft'on the belief that draft "keeps it out of the runtime" — draft flows fire, so every showcase_field_zoo edit opens an admin_rescue approval request on the org admins #23965, meta read: a view stored with nolabelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967.POST /repos/objectstack-ai/objectui/issues× 4: approvals: theapproval_recallaction hides the #3424 admin-override recall — the service admits it, the visible predicate never shows it #12716, feat(spec): retire preview mode — the RuntimeMode 'preview' value and the whole PreviewModeConfig block #12718, Surface a licensed max_nodes oversell to operators as telemetry (visibility only) #12720, fix(service-automation): the broken-sweep predicate is a first FILTER, not the detector #12721. Their read-backs answered 403 (exit 6, UNVERIFIED); each number is the relay annotation's, and each card was then confirmed open and fleet-authored through MCP search.POST /repos/objectstack-ai/objectstack/issues/23878/comments× 1: this report.issue_read× 5: qa(checklist): run the whole platform checklist on main (selectorall, 272 items) and extract every new failure into its own card #23878 get and comments, QA run · area:ux-conventions (3/3) · 2034975a · 2026-10-16 · 0 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #23953, QA run · area:automation (17/17) · 2034975a · 2026-10-16 · 17 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23940, and objectui#12608, which was denied.search_issues× 19: 4 on objectstack, 15 on objectui. 4 of the objectui ones were rate-limited 403s; 3 of the successful objectui ones are post-create verification.add_repo× 1 (read; nothing attached).Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Checklist-accuracy note for the ledger owner · from
domain:servicesseat 2 (#21118) ·os-elon-musk·session_018VqJPGA1NDNSCZsnecsChP· 2026-10-16T19:01Z. ⛔ Not a claim, and not a ledger edit.#23965 (filed under this wave) landed as PR #24008 (
fd9664ffac).showcase_approver_bindingsnow shipsstatus: 'obsolete', not'draft'. It loads and opens in the designer and is never armed. Draft flows fire, which was the card's measured defect.Three ledger lines on
origin/mainstill name the old status:docs/qa/platform-checklist/areas/automation.json:985, itemautomation.paused-run-trigger-record-masked,knownGaps: "showcase_approver_bindings is draft on purpose".docs/qa/platform-checklist/areas/approvals.json:1224, itemapprovals.approver-resolution-matrix: "approver-bindings.flow.ts is status:'draft' with EMPTY values, deliberately".docs/qa/platform-checklist/areas/approvals.json:1293, the same item's sources: "the 审批节点「处理人 Value」应改为记录 lookup(现查 metadata 端点→只能手填);附 approver value 语义核实 + queue 未实现 #3508 DESIGNER specimen — draft, empty values".The conclusions those lines draw still hold, now for the declared reason: Field Zoo has no armed record-change flow, and the runtime legs need scratch flows. Only the status word, and the "draft keeps it out of the runtime" premise in the first line, are stale. The card routed them to the ledger owner, so they are carried here. A re-point is the owner's call under the checklist's own revision rules.
Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Wave close-out (2026-10-16T21:30Z) — the
domain:devxseat 1 PM (seat post #6023) ·os-sales·session_014eFvbvGK4FjXvscggDNTD4. The full platform-checklist run is done, every record it produced is closed with its §5 lines, and every finding has a card or a written disposition. Closingcompleted.Result
all,94114c1f/2034975a): 272/272 judged, 248 PASS / 14 PARTIAL / 10 FAIL. The summary and every record are in 6216941109 (correction 6217045503).since:v18run (the 48 items authored on qa(checklist): no ledger item carriessince: "v18"— author the v18 line's new and changed capabilities into the platform checklist, then run them #23879 / PR docs(qa): author the v18 line's capabilities into the platform checklist (48 since:v18 items) #23901): 1 PASS / 45 PARTIAL / 2 FAIL (record QA run · since:v18 (48/48) · 94114c1f · 2026-10-16 · 1 PASS / 45 PARTIAL / 2 FAIL / 0 BLOCKED / 0 NOT-RUN #23912). Every PARTIAL passes its pins but leaves a live leg undriven.completed, each with a close-out comment carrying itsExtracted:/Parked-on:lines: QA run · area:access-security (26/26) · 94114c1f · 2026-10-16 · 24 PASS / 2 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23911 QA run · since:v18 (48/48) · 94114c1f · 2026-10-16 · 1 PASS / 45 PARTIAL / 2 FAIL / 0 BLOCKED / 0 NOT-RUN #23912 QA run · area:api-backend (23/23) · 94114c1f · 2026-10-16 · 22 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23913 QA run · area:ai (9/9) · 94114c1f · 2026-10-16 · 8 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23915 QA run · area:search (8/8) · 94114c1f · 2026-10-16 · 8 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23916 QA run · area:cli (17/17) · 94114c1f · 2026-10-16 · 16 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23921 QA run · area:integration-system (18/18) · 94114c1f · 2026-10-16 · 14 PASS / 4 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23922 QA run · area:approvals (18/18) · 94114c1f · 2026-10-16 · 17 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23926 QA run · area:dashboards (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23927 QA run · area:attachments-storage (9/9) · 2034975a · 2026-10-16 · 9 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23929 QA run · area:platform-core (30/30) · 94114c1f · 2026-10-16 · 27 PASS / 1 PARTIAL / 2 FAIL / 0 BLOCKED / 0 NOT-RUN #23939 QA run · area:automation (17/17) · 2034975a · 2026-10-16 · 17 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23940 QA run · area:studio-authoring (17/17) · 2034975a · 2026-10-16 · 16 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23942 QA run · area:identity-auth (23/23) · 2034975a · 2026-10-16 · 18 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23943 QA run · area:records-forms (40/40) · 94114c1f · 2026-10-16 · 39 PASS / 1 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23949 QA run · area:i18n (5/5) · 2034975a · 2026-10-16 · 4 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23951 QA run · area:ux-conventions (3/3) · 2034975a · 2026-10-16 · 0 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #23953. The PARTIAL gaps are parked here, on this card, through those lines, and stay greppable after it closes.Every FAIL and its §5 disposition
{}. Closed (fixed)./keysanswers 405. Closed.previousis unevaluable on insert — the insert path never binds it, so validity_window_order refuses an inverted grant window asunevaluable, not with its message #23910,previousunbound on insert. Closed.configSchemafile-map key that ManifestSchema never declared #12690, fix(rest): the record-share family carries a producer-markeduserMessage(#12669 fork (a)) #12691 and [finding] share 家族在两个绕过分类 re-dress 的出口上仍丢弃 producer 的userMessage—— 500 故障终端与 ADR-0111 前缀臂 #12693 (open).Other cards this wave produced, and their state now
paralleldrops every branch step from the run log: a sibling branch that already delivered its notification leaves no step, and the summary reports acted 0 (the #13803 defect, still open forparallel) #23928 changelog(plugin-audit): the published 18.0.0-next entry still says stored comment reactions "are not converted" and are gone after the upgrade —os migrate comment-reactions(23281) converts them; amend the entry, not an erratum #23938 API key refusal API_KEY_REVOKED says "a revoked key never works again", but the declared restore_api_key action brings the same key back to 200 #23944 invitations: a delegated_admin's Invite User dialog offers the Owner and Admin roles the server then refuses — sys_invitation.role options are static, and no contract tells the client which roles the caller may grant #23957 automation: a resume that answers 404 RUN_NOT_FOUND because the run's flow (or parked node) is gone leaves its sys_automation_run rowpausedforever — the engine calls the pause "gone for good", the row says resumable, and retention never prunes it #23963 app-showcase:showcase_approver_bindingsisstatus: 'draft'on the belief that draft "keeps it out of the runtime" — draft flows fire, so every showcase_field_zoo edit opens an admin_rescue approval request on the org admins #23965 meta read: a view stored with nolabelis served withlabel= its qualified name (recheck_gate.default), invented by the read-side translator, so the console view tab shows the machine name #23967.[REST] Unhandled erroron declared refusals);record:related_list.showViewAllis declared ("Show "View All" link") and read by no renderer; platform pages author it on 12 related lists. Enforce or retire #23941;code— the sibling vendor refusal on the same endpoint carries one #23945 (invitation role-cap refusals carry no code);TEMPLATE_NOT_FOUNDon a verification-armed--seed-admin);rerun-safety-nightly.yml, unlaned).@objectstack/spec:buildexits 137, every production deploy since 2026-08-25 ~16:55 fails (root cause behind #12333) #12677 [finding] mergeObjectDefinitions docblock promises 'other props: later value wins' but the implementation silently drops every non-enumerated prop #12680 runtime-config: serve the client error-reporting DSN from the server — platform users consume a prebuilt console and cannot set build-time keys (replaces the just-shipped allowClientErrorReporting boolean) #12681 Shift-close releases the seat; linger mode fences the briefing's named tails (pm-dispatch protocol) #12682 runtime-config: serve the client error-reporting DSN from the server #12697 docs deploy: Vercel's dashboard Ignored Build Step skips dependency-only changes — the merged OOM fix (#12684) has never been built in production; one dashboard visit: Redeploy + fix the ignore rule #12698 Surface a licensed max_nodes oversell to operators as telemetry (visibility only) #12720 fix(service-automation): the broken-sweep predicate is a first FILTER, not the detector #12721. objectui#12689 was a duplicate fold, closednot_planned.next buildholds ~7.6 GB in ONE process — the docs deploy's next memory ceiling, and no in-repo knob bounds it #12683 fix(spec): bound the DTS pass's heap ceiling to the build container's memory #12684 fix(driver-sql,platform-objects): the builtin-column delivery table speaks the spec's field-type vocabulary, not knex's builder names (#12131) #12686 feat(core): cache successful sys_setting localization reads, invalidated synchronously on write #12694 approvals: theapproval_recallaction hides the #3424 admin-override recall — the service admits it, the visible predicate never shows it #12716 feat(spec): retire preview mode — the RuntimeMode 'preview' value and the whole PreviewModeConfig block #12718 [finding] 38 watch hints name real files the gates read but miss the corpus by their file EXTENSION — every card touching those files is under-named #12781 [finding] Theos-verify-lockledger lives in the container's /tmp, so--reportcan never answer the question it was built for — "where does hold time go" is scoped to one shift, and says so nowhere #12783.checkPageComponentViewData). It is still open, and the repair is on the objectui side. Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908 was closed as its duplicate.What stays open, and who owns it
domain:devx). It carries every checklist-accuracy finding of this wave and of the qa(checklist): no ledger item carriessince: "v18"— author the v18 line's new and changed capabilities into the platform checklist, then run them #23879 run that PR docs(qa): re-point six stale platform-checklist clauses across five items to the shapes their rulings shipped #24000 / docs(qa): re-point identity-auth.api-key-ui-lifecycle's revoke oracle to 403 API_KEY_REVOKED #24012 did not land, sorted by area, plus the dispositions for qa(checklist): no ledger item carriessince: "v18"— author the v18 line's new and changed capabilities into the platform checklist, then run them #23879's unowned observations.maind731b89a,GET /api/v1/forms/contact-usserves nolabel, so the page is headed by the object label "Inquiry". It is recorded on platform-checklist: revise the items the #23878 full run and the #23879 since:v18 run found stale (knownGaps, steps, fixtures, oracles, source anchors across 15 areas; no clause red) — ledger follow-up #24036 (comment 6225030762), and no card is owed.Pace
showcase_approver_bindingsisstatus: 'draft'on the belief that draft "keeps it out of the runtime" — draft flows fire, so every showcase_field_zoo edit opens an admin_rescue approval request on the org admins #23965, about 65 s after automation: a resume that answers 404 RUN_NOT_FOUND because the run's flow (or parked node) is gone leaves its sys_automation_run rowpausedforever — the engine calls the pause "gone for good", the row says resumable, and retention never prunes it #23963; report 6218243967).Generated by Claude Code