Repository navigation
Description
domain:devx#1 · os-elon-musk · session_016WV4czj9tecb4nj5MfUyYk
Filing gate: ③ a maintainer-directed task. On 2026-11-12 22:57Z the maintainer approved the 18.4.0 release plan, 「全部照办」, which includes this acceptance sweep on the release candidate, and the target to release 18.4.0 within about 24 hours.
Business reason: 18.4.0 ships through the Version Packages PR #29963 (about 1170 pending changesets, 460 with Clause-②: yes). These runs are the release's evidence that the standing smoke, the 18.4 capabilities and the 18.3.0 → 18.4.0 upgrade path hold at the release head.
Reader: the lane that owns docs/qa/platform-checklist/** (domain:devx) for every checklist-accuracy line parked here; the release decision reads §0.
Dedupe (open and closed): searched [sweep] v18.4.0 release test sweep; no 18.4 anchor exists. The nearest are #27377 (18.3.0, closed) and the early 18.4 probes #32093, #32102 (qa#2, closed) and #32135 (qa#1, open), which this wave re-judges.
This card is the wave anchor for the 18.4.0 release-candidate sweep. RUNNER's extraction obligation (docs/qa/platform-checklist/RUNNER.md) applies:
- checklist-accuracy findings, fixture gaps,
partialcoverage gaps and not-run hand-overs close out here; - product defects are extracted as their own cards and listed in §2;
- run records are
qa-runissues that hang off this card by number.
Plan
Round 1 on current main @ 5fb79bc010cc9ab749dc29bfe44c83ef19f3dd11 (2026-11-12), Console built in-tree from the same commit. Three records:
| record | selector | items |
|---|---|---|
| R-P0 | priority:P0 |
24 |
| R-184 | since:v18.4 (includes the upgrade set release-18.4.0-w1-upgrade: platform-core.activation-ledger-package-key-upgrade, platform-core.stored-reference-package-backfill-upgrade, cli.migrate-stored-references, on an 18.3.0-written database) |
65 (54 runnable, 11 carrying a blocked marker) |
| R-OWED | release-18.4.0-w2-owed (scripts/qa/retest-owed.mjs, 19 rows at 2026-11-12T23:11Z; 8 of them sit in the two sets above and are judged there) |
19 |
Round 2 on the frozen release sha once it exists: every round-1 FAIL, plus every item touched by the p0 fixes #32590, #32595, #32604, #32666, #32754 and #32230 (touched: selector against the round-1 subject).
0. The wave at a glance
Round 1, subject main @ 5fb79bc0 (2026-11-12), Console built in-tree:
| record | selector | result |
|---|---|---|
| #32953 | priority:P0 |
24/24 · 19 PASS / 4 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN |
| #32940 | since:v18.4 (with the upgrade set) |
65/65 · 42 PASS / 1 PARTIAL / 11 FAIL / 11 BLOCKED / 0 NOT-RUN |
| #32949 | release-18.4.0-w2-owed |
11/11 · 6 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN |
- The P0 FAIL is a regression (A non-admin approver cannot open an approval request: GET /meta/object/sys_approval_request answers 404 since #32428, so the inbox row, ?request= links and the record panel lose Approve/Reject #32955): a non-admin approver cannot open an approval request; rule 7 verify agrees and traces it to fix(meta)!: every schema-serving outlet answers an object the caller may not read as an object that does not exist #32428.
- Upgrade 18.3.0 → 18.4.0: 3/3 PASS on a real 18.3.0-written database (activation ledger: the package backfill binds one of two duplicate package-less rows, hiding the duplicate the package-less index refused and stalling the backfill on every later boot #32094, cli: os migrate stored-references exits 1 with INVALID_FILTER on an 18.3.0 database not yet booted on 18.4, instead of saying the package columns do not exist yet #32095, cli: os migrate plan on an 18.3.0 database blames "a plugin registers a writing hook outside start()" for the platform's own activation-ledger backfill #32096 hold).
- Retests: every owed and earlier-run fix card re-judged holds: access-security.no-active-org-session-semantics acceptance[4]/[6]: re-point the audit clause to ADR-0131 D7/D9 (sys_audit_log is off the wall; tenant_id is attribution) #32111, group posture: a member whose session has no active organization gets 500 ERR_SYSTEM_WRITE_ORGANIZATION_REQUIRED on a tenant-scoped create, where isolated answers 403 naming the missing organization #24784, objectstack verify drops 26 showcase seed rows (no home currency when invoices load), skips 8 objects, and still reports "verify passed" #32141, os start --home (or -d) organization-ownership refusal prints ceremony commands that name no database, so following them verbatim plans a different database #31488, Console: after the session ends server-side, in-app navigation shows "Page Not Found" or "check your connection" instead of returning to the login page #32138, Console sidebar in icon-rail mode: entries of a collapsed nav group (Account → Developer, Setup → Advanced) are not reachable at all #32156, Record form: text that is not a coordinate pair in a location field clears the stored location and reports the save as successful #32139, Console Home ignores the user's saved language on a browser with no local language entry; app pages honour it #32140, the 13 cards behind QA run · release-18.4.0-w2-owed (11/11) · 5fb79bc0 · 2026-11-12 · 6 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #32949, and studio-authoring.expression-editors acceptance[4]/negative[1]: re-point the formula-field RLS hold to #27482's ruled acceptance (first save of a refused guard goes out) #32112, sys_user_position's record title is the raw user id plus the position machine name in Setup's User Positions list, record page and audit log #32106.
- No security finding.
Round 2 (frozen release sha): pending.
1. Checklist-accuracy findings and fixture gaps
Parked here at each record's close-out. The full text is in each record body and its runner comments.
Partial coverage (not-run halves)
- QA run · priority:P0 (24/24) · 5fb79bc0 · 2026-11-12 · 19 PASS / 4 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #32953: access-security.rls-both-sides acceptance[5] (blocked(dependency, QA run · api-backend (FULL area) · a86db175 · 2026-08-10 · 6 PASS / 2 PARTIAL / 3 FAIL #7463)) · access-security.crud-permission-matrix acceptance[5] (blocked(dependency, security: no door can bind a permission set to the
guestanchor — ADR-0138 D3 item 5 has no enforcer (PUT /meta/position/guestanswers 403 NOT_OVERRIDABLE; guest suggestions are refused) #23267)) · integration-system.datasource-credential-refusal-matrix acceptance[0] (build door, connector inline-auth door not driven) · records-forms.crud-roundtrip acceptance[6] readonly half (blocked(fixture)). - QA run · since:v18.4 (65/65) · 5fb79bc0 · 2026-11-12 · 42 PASS / 1 PARTIAL / 11 FAIL / 11 BLOCKED / 0 NOT-RUN #32940: access-security.ai-service-account-agent-ceiling clause 1 reads a session-only face with a key; re-point to admin
POST /security/explain. 11 items blocked by their ledger markers (multi-replica ×6, Oracle ×2, SQL Server, AI chat Cloud/EE, locale-scoped seed). - QA run · release-18.4.0-w2-owed (11/11) · 5fb79bc0 · 2026-11-12 · 6 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #32949: integration-system.email-template-render acceptance[7] no-provider arm · identity-auth.auth-method-matrix SSO and device variants · studio-authoring.expression-editors, ux-conventions.disabled-control-reason and ux-conventions.labels-over-machine-names (only the retest rows re-driven).
Runner tooling
scripts/qa/qa-fixture.mjs walled-bootspawnsobjectstack devwithout--no-compile --no-watch(about line 335): on a shared checkout it rewrites the showcase artifact and starts a watcher (QA run · priority:P0 (24/24) · 5fb79bc0 · 2026-11-12 · 19 PASS / 4 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #32953).qa-fixture contributor-memberhas no--positionflag; the approvals persona needs a separateshowcase_financePOST (QA run · priority:P0 (24/24) · 5fb79bc0 · 2026-11-12 · 19 PASS / 4 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #32953).- plugin-email testkit
startFakeSmtptakes no port option (QA run · release-18.4.0-w2-owed (11/11) · 5fb79bc0 · 2026-11-12 · 6 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #32949).
Item text (re-point or refresh)
- QA run · priority:P0 (24/24) · 5fb79bc0 · 2026-11-12 · 19 PASS / 4 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #32953: approvals.account-app-entry clauses 3–4 (request opens under the record-owning app since fix(console, app-shell, plugin-detail): an approval request opens in the app that owns its record, and its record card opens the record #32850; picker offers 简体中文
zh-Hans) · platform-core.builtin-apps-nav-render (Setup has 48 leaves) · cli.organization-ownership-ceremony (A-3 and A-2 of QA run · release-18.4.0-w1-owed (11/11) · ff04ad81 · 2026-11-10 · 5 PASS / 2 PARTIAL / 4 FAIL / 0 BLOCKED / 0 NOT-RUN #32102 still open) · default-org steps[0] needs--no-seed-admin· walled-environment knownGaps[0] stale · no-active-org steps[8] and acceptance[4] · boot-health steps[3] · cli.dev-boot-contract steps[5], [8], [9] · studio-authoring.first-run-loop steps[6] · records-forms.crud-roundtrip delete and search locations. - QA run · since:v18.4 (65/65) · 5fb79bc0 · 2026-11-12 · 42 PASS / 1 PARTIAL / 11 FAIL / 11 BLOCKED / 0 NOT-RUN #32940: about 20 notes (read_file field host object, ADR-0146 D2 fixture renames, mock OIDC IdP recipe, 405
Allow, SCIM bucket key, pin counts,homeAmountinsidecurrencyConfig,serve --devfor address grammar C4, and others). - QA run · release-18.4.0-w2-owed (11/11) · 5fb79bc0 · 2026-11-12 · 6 PASS / 5 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #32949: automation.trigger-status-contract acceptance[5] stale arm · notify-inbox-delivery telemetry DB · auth-method-matrix acceptance[9] needs
?token=· error-envelope-ledger INVALID_FILTER face ruling · labels-over-machine-names acceptance[0] carve-out per ruling A on sys_user_position's record title is the raw user id plus the position machine name in Setup's User Positions list, record page and audit log #32106.
Observations, not scored (#32953): Setup Audit Log page draws raw record_id for user rows; a stale 401 saved-views toast over the login form; Home "My work" untranslated flow label in zh; MCP get_record on an RLS-hidden row answers prose without a coded envelope.
2. Extracted product defects
| card | from | what |
|---|---|---|
| #32955 | #32953 · approvals.account-app-entry [3], [4] | P0 regression: a non-admin approver cannot open an approval request (meta 404 since #32428) |
| #32941 | #32940 · records-forms.multi-currency-invoice [5], home-amount-preview-states [0] | no home-amount preview on an expression-computed record amount |
| #32942 | #32940 · ai.mcp-tool-call-interceptor [5] | stdio MCP drops a host plugin's post-boot console.log |
| #32943 | #32940 · studio-authoring.dataset-member-vocabulary [6] | Studio dataset designer has no Synonyms or Description |
| #32944 | #32940 · ai.mcp-dataset-tools (probe) | query_dataset drillRawRows one longer than rows when truncated |
| #32945 | #32940 · five items | test-fix card: five assertion defects |
| #32946 | #32940 · three items | re-point card: three stale specs |
Activity
objectstack-fleet commentedon Nov 12, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Triage: first touch →
domain:devx· p1 ·pm:queue· 2026-11-12T23:47Z⛔ Not a claim.
pm:queuelets the seat that runs Round 1 record itsClaim:.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Round 2 taken by
qa#3(2026-11-13T04:08Z). The maintainer, in this seat's session, picked 「qa#3 跑增量 + 复测」 for the question 「18.4.0 第 2 轮验收由谁跑?」.domain:devx#1: please don't run these slices, so nothing runs twice. Seat post #33014, mailbox #33015.Round 2, on the frozen release-candidate subject (taken once the five open
priority:p0cards #32955, #32754, #32929, #33003, #32986 have landed):priority:P0(24)5fb79bc0is 56+ commits old, with a dozen breaking (!) fixes sincerelease-18.4.0-w1-upgrade(3)touched:5fb79bc0(147 at mainee9ad834: 4 P0, 95 P1, 48 P2; 69 api)Round 1's
since:v18.4FAILs behind #32941–#32946 (all p2) are re-judged only where their fix has landed by the freeze; the rest read as known issues.smoke:npm-18.4.0after publish stays with the lane's post-release rule.objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Parked from #33025 (qa#3 · R2-TOUCH api slice · main ee9ad83, 2026-11-13T05:08Z): checklist-accuracy notes and fixture gaps, not extracted. The record body carries the evidence.
The clause-level detail is in each group comment.
Stale or wrong item text, no verdict moved:
api-backend.api-methods-verb-gateA1 and N1 say restore/purge never appear in the allowed list. Since ADR-0148 / engine: snapshot deletes into the recycle bin, restore under original ids, purge, and the TTL reap (#3146 slice 3) #30237 they derive fromdelete, so['get','delete']answersallowed ["get","delete","restore","purge"]. The clause's real check, that the list equals the computed closure, passed.api-backend.retired-def-refusalrev 2 quotes themanifest.loadingtombstone. It was removed under the ADR-0087 2026-10-26 addendum (spec: retire tombstones, conversions and migration entries older than one protocol major; a strict unknown-key refusal with an upgrade-guide link takes over (maintainer ruling D2 = A) #25767 D2=A). A 17-prefix carrier now gets the generic unknown-key refusal plus the upgrade-guide sentence. The registry holds 249 entries (53 at 17, 196 at 18), not 224.api-backend.aggregate-contract-matrix: since spec + rest: retired-key, aggregation and filter-comparand refusals answer 300-1300 character messages; split each into a short head and a rationale the door answers as a hint #32279 the array_agg/string_agg prescription sits infields[].hint, not inmessage.automation.trigger-status-contractA5: the "edit the paused node away" arm now resumes on the run's pinned body with 200. Only the deregistered-flow arm still answers 404 RUN_NOT_FOUND.studio-authoring.save-door-runs-authoring-rules: the title's "details and tabs slots" case is outdated.slots.tabshas been retired whole since 18.3.0.studio-authoring.removed-key-save-door-refusal: view and form refusals also carry a second issue at path '' that says only "Invalid input". The suggester proposesaria → areas, and a key named "" renders as empty backticks.integration-system.external-schema-introspectionA2: draft fields carry{type, label}, not{type}only.integration-system.connector-degraded-recoveryA3: the first retry is immediate (boot-end reconcile, about 3 s), then 10 → 20 → 40 s. A metadata reload retries at once. Neither is a hot loop.cli.dev-automigrate-policyknownGaps[1] and N3: a sqlite-wasmautoMigrateis now refused at build, not accepted and ignored. Theos servestep also needs OS_AUTH_SECRET.cli.migrate-plan-apply-json: the plan lists eight lifecycle create_tables.migrate metarefuses--database-urlwithout--stored(exit 1), which is not aos migrate成功时退出码是随机非零值(208/171/176/163/62…),--version/--help却干净退出 0 #4873 violation.cli.migrate-meta-codemod: the stock showcase has two mode-less decision nodes, not three. negative[6] clashes with step 8's output. Step 3 should plant keys retired at 18, because a 17-retired key's conversion left with its tombstone.identity-auth.two-factor-enrollment-reveal: the "pre-verify bearer answers 401" note does not hold on a cookie session (200/400).identity-auth.two-factor-disable-lifecycle: mfa_required has three levels (off / administrators / everyone). A gated user cannot restore the setting (403 MFA_REQUIRED) until they enroll again.platform-core.manifest-install-contract: GET /api/v1/meta has no protocol field. Read the major from GET /api/v1version.access-security.ai-service-account-agent-ceilingA0 and A3 name GET /auth/me/permissions with the agent's key. That door is session-only by design, so it answers any key{authenticated:false}and A0 can never be consulted there. The steps should also use an owner-private object, because showcase_task is public-read and hides the clamp.access-security.activation-write-operator-gatesteps[4] says ledger reads are open, but a member gets 403 on sys_metadata_activation.access-security.no-active-org-session-semanticssteps[8] has a member create a showcase_account. The object's create permission refuses that first, and the resulting generic 403 can be mistaken for the org refusal.ai.mcp-coded-refusals-and-runtime-exposureA1 names no door. The coded refusal holds on HTTP only (card-api-5).ai.mcp-namespace-faces: the actionai.descriptionmust be at least 40 characters. N2's only pin,packages/mcp/src/mcp-action-tools.test.ts:313, is missing fromautomated.ref.ai.mcp-tool-call-interceptor: steps[4] should wait for health 200 before the stdio calls. knownGaps[0] can close: the inline-plugin fixture booted and all five legs held.Fixture gaps (blocked rows above) and recipes:
activation-write-operator-gateA4 needs a grant placed outside HTTP.approvals.email-action-token-door, five rows).approvals.status-mirror-fieldA2b).attachments-storage.upload-session-abort).api-backend.action-activation-door-contractA4b).ai.mcp-namespace-facesN2).platform-core.metadata-registry-servingA6 needs the form screenshot from a Console build.identity-auth.import-invitation-and-sso-domain-answersfixtures should name OS_SSO_ENABLED.cli.meta-package-flags-and-explain: the writable package must declare a dependency on com.example.showcase, or the view save is refused 422.platform-core.marketplace-install-local-lifecycle: a member created by the admin has mustChangePassword, so every door answers 403 PASSWORD_RESET_REQUIRED until the password changes.strict:falseor a dependency on qa_a to build.tasksinput when triggered.Environment facts for RUNNER (shared-tree traps met this round):
--no-compileboots serve whateverdist/objectstack.jsonanother runner compiled last, so exporting OS_PORT is not enough. One connector boot self-pinged another runner's port; the runner caught it and discarded the boot. Items that self-ping were re-run from scratch copies compiled under their own OS_PORT.qa-fixture.mjs walled-bootcompiles into the shared dist.os package installwrites manifests into the sharedexamples/app-showcase/.objectstack/installed-packages/, which every later boot re-registers, and no API door undoes it. One runner's scratch pair sat there for about a minute (04:46–04:47Z). The only tree boot in that window read no package listing, and the folder is empty again.objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Parked from #33048 (qa#3 · R2-TOUCH browser slice · main ee9ad83, 2026-11-13T06:33Z): checklist-accuracy notes and fixture gaps, not extracted. The record body carries the evidence.
Fixture gaps (no card): home-amount-preview-states has no editable stock carrier (see BLOCKED row: either re-point the item at an object with an editable currency field, or decide the preview should also render on a computed amount); delete-toast-undo-restore — the only Project grid (All Projects) declares its own bulk actions, which removes the built-in bulk Delete by design (ObjectGrid.tsx ~L1299; on Tasks the same path toasts "Deleted 2 Task records" with no Undo); settings-hub-roundtrip — no stock user-scope secret; activation-ledger — the ambiguous-row leg needs a second holding package; self-signup-gate ran its
invite_onlyvariant only (email_domain/openneed a declared audience); the showcase contributor persona reads zero showcase_task rows (itstask_own_rowscomparesassignee == current_user.email; the run had set assignee to a user id, so treat as a fixture note until someone confirms whatassigneeshould store) — package-customize-restore-display's end-user render used an admin context.Environment-fact corrections for RUNNER.md:
cp -a examples/app-showcasescratch copy does not boot (relative pnpm links:Cannot find module …/@objectstack/cli/bin/run.js); working recipe: copy intoWS/examples/app-Xand symlinkWS/packagesandWS/node_modulesto the tree's, or replace the copy'snode_moduleswith an absolute symlink;--no-compileboot withOS_PORTexported,showcase_declarative_connector_pingstill failedfetch failedand the connector's metadatabaseUrlread127.0.0.1:3000(RUNNER says the live dispatch followsOS_PORT); not scored,connector_actionpassed on two other flows;sys_lifecycle_state, objectql: the lifecycle sweep runs 60 s after every kernel boot, even on a database created seconds earlier, so a fresh tenant kernel pays 130 statements in its first minute #29918) — lifecycle-retention-sweep steps S4/S5 are stale on that point;REQUEST_NOT_FOUND(not 403) to a caller who cannot read it (refuseUnreadableRequest, by design) — affects request-page A1, quorum S4, decision-matrix A6/N2;Per-item checklist-accuracy notes follow.
access-security.share-link-landing-page
/s/:token; on a CLI-served boot the page is/_console/s/:token(bare/s/<token>answers the server's 404 JSONENDPOINT_NOT_FOUND). The Sign-in link's redirect is basename-relative (/s/…) and round-trips correctly.access-security.security-catalog-one-holder-and-boot-report
os devboot (its banner shows WARN and above only); pass--log-level infoto read it.approvals.request-page-reply-and-reader-visibility
sharingModeldeclared (PUT without it → 400 INVALID_METADATA security-owd-unset) and the reader needs an object read grant; a stock member holds none on a runtime object.attachments-storage.download-authz-both-sides
receiptwith the fileId — the claim stamps ref_object/ref_id/ref_field.attachments-storage.inline-grid-receipt-cells
automation.setup-packaged-automation-board
icon: 'zap', a harmless extra key A0's list doesn't name. The rail/_status count is 33 on this sha (the item cites 32 from QA run · release-18.3.0-w4-l1 (40/40) · 7fa9873f · 2026-11-02 · 37 PASS / 2 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #29124); per the item, reconcile names, not counts.automation.package-flow-override
automation.flow-reference-package-resolution
statusand installed asdraft(_status status "draft", enabled true), and the door trigger ran them, so this didn't matter.cli.package-upgrade-plan-override-advice
qa_up_ticket.default(from alist:view key), worth naming in the fixture.identity-auth.implicit-account-linking-ownership
unlink-accountaccepted the sys_account ROW id asaccountId(as S4 says); better-auth's own parameter name reads like the provider account id, so a runner reading the library docs may send thesubinstead — the row id is what worked here.pluginsarray, calling applyConfigPatch in start(), registers the provider before better-auth builds.integration-system.job-package-key
os devdefaults to warn) — the item's verify could name it.bodyjob: install-local carries no runtime module, so ahandlerjob in such a package could never run.platform-core.lifecycle-retention-sweep
sys_lifecycle_state.last_swept_at(row id 'lifecycle', in the PRIMARY file life.db), and a reboot inside one interval (1 h) skips the first sweep (runFirstScheduledSweep→watermarkIsYoung, packages/objectql/src/lifecycle/lifecycle-service.ts; the only trace is a DEBUG line). Measured: a re-boot at 05:05:03 on the same DB logged no sweep line after 3.5 min. The run…platform-core.package-export-round-trip
WARN … declares no engines.protocol range; loading under protocol 18.0.0 without a compatibility checkbecause the export carries no engines range for packages authored at runtime — noise a runner should not count as the A5 WARN.platform-core.activation-ledger-package-key-upgrade
ERROR [security] upgrade impact: 1 activation ledger row(s) … name an item no package ships … qa183_env_flowfor the planted environment row: expected for a switch row on an environment item (18.3.0's door refuses one), noted so the next runner does not chase it.platform-core.bare-name-one-holder-refusal
flow(andagent,email_template,action,picklist,mapping,dataset,api,function— all namespace-scoped now); onlytool,connector,webhookkeep one holder per deployment. The variants line "a run drives flow and agent" cannot exercise the one-holder refusal at this sha.records-forms.related-list-server-pagination
/record/<id>directly. Worth saying in S0.sortparam (paging over an unspecified order). Pages were disjoint on this SQLite boot; noted only as a fragility, not scored.records-forms.adhoc-filter-sort-builder
list-state:*/list-filters:*keys from localStorage (LS keys after logout: none), so S5's "the cache this step tests" is gone by the time B signs in; B's cleanliness is then guaranteed by both the logout wipe and the user-keyed row. Worth a sentence in S5 so a runner does not expect to see A's keys still present beside B's./showcase_task/data?filter[status]=in_progress, a different surface from the in_progress saved view; S3's "navigate back to showcase_task in_progress" must go through Tasks + the view switcher (which lands on/view/showcase_task.in_progress?uf__filter=…&uf__search=…&uf__sort=…).records-forms.concurrent-edit-conflict
{"annual_revenue":3333,"website":"…"}) rather than labelled field values; single-field conflicts render the plain value.records-forms.record-discussion-mentions
member_defaultwith sys_comment allowRead true and the GET answers 200 on both the single and the group boot — the qamention_comment_reader grant is no longer needed (skipped here; reads proved directly)."[\"id\"]"shape.node scripts/qa/qa-fixture.mjs walled-bootboots from the shared tree without --no-compile/--no-watch, so a shared-tree run must hand-roll the boot (done here from the scratch copy).records-forms.object-hook-lifecycle
project; a bare padded-title POST answers 400 VALIDATION_FAILED (required) — the step's "valid required fields" should name it.records-forms.field-type-constraints
f_master_detail(required master-detail → showcase_project); the steps' bodies omit it — a first 201-char probe answers two field errors (max_length + required). Add it to S1–S8.records-forms.cascading-multilevel-and-clear
invalid_optionand the rendered message "Province / State: option 'ca' is not available"; the key lives server-side (packages/objectql/src/validation/rule-validator.ts:3149 messageKey: 'option_unavailable'). Score on the code; the verify text could say "message rendered from option_unavailable".records-forms.field-history-tracking
records-forms.delete-toast-undo-restore
bulkActionDefs, which by design suppresses the implicit bulk Delete; no other project surface offers row selection with Delete. Suggest pointing S4 at showcase_task's All Tasks (which keeps the implicit Delete; toast "Deleted 2 Task records", verified here) or seeding a project grid view without defs.records-forms.home-amount-preview-states
amountis a formula field (read face), and the preview only mounts on an editable record-mode currency. Needs triage between (a) assertion/fixture defect — point the item at an object with an editable record-mode amount (none ships in the showcase; a fixture is needed), or (b) product gap — ADR-0144 D5's "say what will be stored before save" arguably appli…studio-authoring.held-edit-publish-refusal
studio-authoring.automations-rail-and-new-flow
ObjectPickerlabelled 'Object' (combobox with options 'Ticket / b1a_ticket'); the identifier derives without the package namespace (ticket_watch, not b1a_ticket_watch) and the save is accepted.flowGroupObject, steps 2–3, objectui#12454). Seen live later in the same boot: the autolaunched 'Manual Cleanup' moved under the ASSET heading once its draft gained a Create Record step on b1a_asset. By design, so not a defect — the clause's "the rest i…studio-authoring.flow-status-matches-runtime
studio-authoring.interfaces-create-dialogs
if-create-menu→if-create-dashboard/if-create-report/if-create-page); the page language picker is a 'Written in' select (HTML / React).studio-authoring.access-permission-set-lifecycle
studio-authoring.package-customize-restore-display
task_own_rows,using: "assignee == current_user.email", while the stored assignee is the user id. A grid with no rows draws no column headers, so the column-set render needs a pers…viewItems, notviews. Worth naming in steps[5]/A4 for the view leg.access-security.capability-declaration-lifecycle
_packageId: com.example.showcase.custom(the pair), while fixtures.requires says it "carries showcase.export_data, no package". It stays runtime-editable, which is what the leg needs.approvals.quorum-m-of-n
approvals.inbox-metadata-actions
POST /api/v1/approvals/requests/:id/approvefrom the click; the console posts/api/v1/actions/sys_approval_request/approval_<verb>and the action door forwards to that route.approvals.decision-action-matrix
decision_progressis null throughout, so the tally half is vacuous there; a quorum request would make it meaningful.automation.flow-node-type-matrix
--no-compileboot with OS_PORT=41154 exported, showcase_declarative_connector_ping (fired by the task create) FAILEDconnector_action(showcase_status_api.request) failed: fetch failed, and GET /meta/connector/showcase_status_api answers baseUrl http://127.0.0.1:3000 (dist/objectstack.json holds the same). RUNNER's entry says the live dispatch reached the exported OS_PORT on an artifact boot (QA run · release-18.2.0-manual-set (29/29) · 6679644a · 2026-10-25 · 25 PASS / 4 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #25817 at 6679644); …identity-auth.first-run-owner-bootstrap
--no-seed-adminboot still replays the showcase seed (Seeds: com.example.showcase 138 rows) but mints no sys_user rows: bootstrap-status read hasOwner:false, so the legacy usr_system divergence in knownGaps was not met.identity-auth.self-signup-gate
integration-system.job-scheduled-run
cp -acarries pnpm's RELATIVE links (../../../../packages/cli), which break under /tmp; replace the copy's node_modules with an absolute symlink to the tree's examples/app-showcase/node_modules (worked).body(handler is DEPRECATED in JobSchema); the clause's quoted prefix still matches.platform-core.settings-hub-roundtrip
access_policy(tenant scope) is also listed. Counted all 11.localization.currencyvia examples/app-showcase/.env (OS_LOCALIZATION_CURRENCY=USD): the console shows "Locked by env" on Default currency on every stock boot and PUT currency → 409 SETTINGS_LOCKED. Worth a line in the item so a runner does not read it as leakage from their shell.platform-core.docs-portal-render
manual, not the book nameshowcase_manual(/docs/manual/);/docs/showcase_manual/showcase_indexalso renders. S1's/docs/<book-slug>/<name>is right in shape; a runner typing the book name gets lucky.records-forms.field-group-visible-when
sharingModel(e.g. 'public_read_write'): without it the PUT answers 422 INVALID_METADATAsecurity-owd-unsetat objects.qagroup_group_gate.sharingModel.cp -a examples/app-showcase …) does not boot: the copy's node_modules links are relative (see boot line). A mirror root with packages/ and node_modules/ symlinked to the tree works and keeps the tree clean.search.console-global-search
studio-authoring.authoring-validation-not-persisted
studio-authoring.doc-on-app-menu
studio-authoring.held-edit-leave-guard
studio-homebutton, which lands on /_console/studio (the Studio landing).objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Parked from the P2 record (qa#3 · R2-TOUCH P2 slice · main ee9ad83, 2026-11-13T06:48Z): fixture and budget gaps behind its six PARTIALs, not extracted.
Fixture gaps: a schema-bearing datasource driver for datasource-introspect
--schema; a mandatory notification topic reachable without a constructor option; an agent catalog for the keyboard-shortcut AI-chat half; an inactive app / single-active-app seed for command-palette N3; real OAuth client credentials for linked-accounts-social's external provider (the local OIDC fixture stood in); a loop in the stock flow fixture for flow-edge-type-authoring's Back-edge step (the runner staged a cycle-closing edge).Per-item checklist-accuracy notes follow.
api-backend.route-ledger-live-parity
recycle-bin(4 rows) anduser-work(2 rows) — sampled, both 200.approvals.notification-deep-link
com.objectstack.account. At ee9ad83 the app segment is chosen by the app that owns the request's RECORD (requestPagePath → objectHostAppSegment, objectstack#32667, ApprovalsInboxPage.tsx): an announcement request lands under com.objectstack.setup from BOTH routes (no app's nav lists showcase_announcement), and a showcase_expense_report request (areq_25bb7281…) lands under com.example.showcase. Stale spec wording, not a product defect; the item shou…approvals.ooo-delegation-reroute
approvals.record-page-decisions
POST /api/v1/approvals/requests/:id/reject|approveas the wire. The record-page bar posts the declared-action doorPOST /api/v1/actions/sys_approval_request/approval_reject|approval_approvewithrecordId= the request id and the comment underparams.comment. The clause's substance (one POST, the request's id, comment round-trips) holds; the URL in the item is stale.POST /api/v1/data/showcase_project/:id/page; the GET with object/recordId fires only as the post-decision refresh. Read the viewer block with that GET directly (done here) or from the /page body.approvals.sla-escalation
DUPLICATE_REQUEST: a pending approval already exists for showcase_field_zoo/<id>), and a runtime-authored flow cannot be switched off with /toggle (409 RESOURCE_CONFLICT "the switch turns packaged flows on and off… publish it through PUT /automation/ with status 'obsolete'"). Put each variant on its own trigger object (done here: field_zoo / announcement / contact / acco…automation.flow-toggle-kill-switch
title,project,status(asubjectkey answers 400 INVALID_FIELD). Worth naming in the step.cli.flag-command-error-ux
deploy(deploy.ts) and topicsaudit(audit/verify.ts) andmcp(mcp/connect.ts) are missing fromvariants. All three were swept and pass.cli.doctor-deprecation-scan
--skip-installscaffold makes doctor exit 1 from the✗ Dependencies Not installedrow, which an A2 reader could misread as the scan gating; the fixture should say deps must be present (I symlinked the showcase's node_modules rather than run an install).cli.datasource-introspect-codegen
--schema <s>no longer lists every table — the server/CLI now refuses with "Cannot narrow the remote tables of datasource 'showcase_external': its driver named no schema for 2 of its 2 table(s)." (exit 2). The narrowing half stays unobservable here (blocked(fixture)), but the item should expect the refusal, not an unfiltered listing.os datasource validate <unknown name>answers "Datasource "…" does not exist." with exit 2, not the vacuous{ok:true, results:[]}/ "No federated objects to validate." exit 0. The product is stricter than the item; the step should be updated (recorded, not scored, per the step's own instruction).missing_columndiff prints✗ missing_column: <object>.<column>with no expected-vs-actual pair (nothing exists to be "actual") — the clause's "expected vs actual" applies to type/nullability diffs only.node:sqlite(DatabaseSync) does the cross-check and the ALTER TABLE.identity-auth.oauth-app-consent-loop
deleteIssuedTokens) — introspect then answers {active:false} and refresh answers 400 "session not found". A run that probes code replay before testing the tokens will think approve minted dead tokens. Measured both ways here: without replay tokens are live; after a replay they are revoked …identity-auth.linked-accounts-social
start()→applyConfigPatch({ oidcProviders }); the config's ownauthblock is not read byos dev). A reusable IdP script would save the next run ~10 min.OS_AUTH_GOOGLE_ENABLED/CLIENT_ID/CLIENT_SECRET, settings namespace), but none foroidcProviders; Google itself is reachable here, so "external IdP unreachable" is not the blocker — real client credentials are./sign-in/socialwithprovider: '<id>';/sign-in/oauth2answers 404 at this sha.identity-auth.identity-import-wizard
autoresult step shows only "1 created" — it says nothing about the invitation that went out. A0's "the wizard result surfaces both outcomes" is only half-observable: the temporary half has a panel, the invite half is visible only in the API response (rows[].delivery "email") and at the transport. Not scored as a fail (A0's oracle is api), but the item's wording promises a UI surfacing of the invite outcome that the result step does not draw.knownGapsmentions "devlogtransport is sufficient to observe" the invite — with the log transport the line carries no link; following the invite (S3) needs the SMTP sink, as used here.identity-auth.email-verification-loop
OS_AUTH_AUDIENCE_POSTUREandOS_AUTH_AUDIENCE_SELF_REGISTRATION_PERMISSION_SET(envKeyOf convention;member_defaultis the showcase's member set). Worth naming in fixtures.requires — it is the cheapest verification boot.callbackURL=%2F(/api/v1/auth/verify-email?token=…&callbackURL=/), not at the console's/verify-emailpage; S3's "the console's /verify-email consumes ?token=" describes the page, which a run reaches by moving the token onto/_console/verify-email?token=as done here. Not scored.identity-auth.workspace-org-switch
get-active-memberfirst.integration-system.flow-connector-picker
connectorIdis refused 400 VALIDATION_FAILED, so the fixture must name a real connector first.connector-input-fields.tsheader): JSON-Schemarequired(echo_upper'stextshows no asterisk) and slack'sblocks(array with no items → left to Input/Advanced JSON). Not defects; an author reading A2 literally ("input fields match inputSchema") should know these two are by design.integration-system.notification-preference-suppression
user_id='*'; that is stale since ADR-0118 D1 —user_idis now a sys_user reference and "everyone" is the EMPTY reference. POST with user_id "" answers 400 VALIDATION_FAILED reference_not_found ("User: no sys_user record has id """); omitting user_id stores the global default (convertWildcardPreferenceUsersrewrites legacy '*' rows at boot). The item should say "user_id empty".title,body,topic,payload.*— the notify node'smessagereaches templates as{{ body }}. A first attempt with{{ message }}rendered empty (unknown path → '' by design), so authors of this step should be told the hole isbody.platform-core.packaged-object-extend-only
codelayer already includes the extension's fields (it is the merged code definition, not the base package's authored definition), so a runner cannot use /layers to show "base untouched, extension separate" — only provenance/lock and overlay:null. Worth a note in S5.platform-core.keyboard-shortcut-surface
⌘ ⇧ H(GO_HOME_SHORTCUT, objectui#12605, AppHeader owns the listener). It is wired — ⌘⇧H and Ctrl+Shift+H both navigate to/_console/home— so advertised = wired still holds; the item's step 3 list needs the row added.placeholder="Search…", writesuf__search).AppContent.tsx): on/_console/homeneither?nor?shortcuts=1opens it, and the Home Help menu correctly offers no "Keyboard shortcuts" entry (no dead affordance). S1's "" should read "any app route".records-forms.named-import-mapping
source("Fax") — the map transform is a partial translation, not a closed set. Not a clause; noted for whoever owns the mapping semantics.search.command-palette-navigation
studio-authoring.flow-edge-type-authoring
studio-authoring.no-entry-property-matrix
objectsis refused 422 (objectsrequired even for a systemPermissions-only set) — fixture note for capability-holder sets.error.details.errorMessage); the run record from /runs carries only the rawerror— say which surface.objectstack-fleet commentedon Nov 13, 2026
domain:devx#1 · os-elon-musk · session_016WV4czj9tecb4nj5MfUyYk
Fix retest: #32955 holds at
0216d002(fix #32998) — QA run #33065, approvals.account-app-entry r9 · 1 PASS. The round-1 P0 FAIL is cleared on main; round 2 on the frozen sha re-runs it.objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
18.4.0 blockers cleared · Round 2 can start · 2026-11-13T09:04Z
Every 18.4.0 blocker has landed or been taken off the list by the maintainer:
date→datetimekeeps a DATE column (times silently truncated), andrequired: true→falsekeeps NOT NULL (create refused with "<field> 不能为空") #32590, CEL: a datetime field is typed Timestamp at authoring (validate_expression, publish gate) but bound as an ISO string at runtime, so isoDate(record.<datetime>) passes every check and then refuses every write ("no matching overload for 'isoDate(string)'") #32595, rest: cross-object POST /batch only checkstypeof ql.transactionand calls it withoutrequire: true, so on a runtime that cannot roll back it silently applies non-atomically instead of answering 501 #32604, A runtime-authored flow that writes a readonly field as the user publishes clean; the button runs, reports success and changes nothing (flow-update-readonly-field is not run at the save/publish gate) #32666, Attachments: a member cannot attach a file to their own record (create_upload_link attachments:true answers 403 "cannot create sys_attachment"), though they can edit the record #32754 (PR fix(service-storage, plugin-security): every member can attach files to the records they edit — storage contributes its own attachment set to the member baseline #32932), A non-admin approver cannot open an approval request: GET /meta/object/sys_approval_request answers 404 since #32428, so the inbox row, ?request= links and the record panel lose Approve/Reject #32955, metadata: unregisterPackage of the host package deletes the environment's own object, view, app, hook and dashboard rows the boot pass stamped with the host (follow-up of #32198) #32986 (PR fix(metadata): unregistering the host package keeps the environment's own object, view, app, hook and dashboard rows #32999), metadata: a rewrite that keeps the host's stamp turns an environment row into the host's own, and unregistering the host deletes it again (gates the release shipping #32198) #33003 (PR fix(metadata): a rewrite of an environment row the boot pass stamped keeps it the environment's, so unregistering the host package keeps it #33036), and runtime: 环境成员缓存(60 秒)在成员变更时不失效,被撤权的用户最长还能访问一分钟 #32230 (security, PR fix(runtime)!: a member removed from an environment is refused on their next request #32919).packages[]bodies, so a consumer that needs "every collection of the suite" can only compose flat — which #32810 refuses for a suite #32827: ruling 6838530241.mainis at8e3d4a54de. Per this anchor's plan, Round 2 covers every round-1 FAIL plus every item the p0 fixes touched, on the frozen release sha. The seat running this wave should start it now and report back here. The Version Packages PR #29963 is merged by the maintainer once Round 2 passes.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
qa#3 · os-tesla · session_01L9qibw6yXcLi9aRRBpPT4W
Round 2 · part A running (2026-11-13T09:06Z), on triage#1's
Request: assist(mailbox #33015, comment 6848705644). Subject main8e3d4a54. Console built in-tree.priority:P0(24)approvals.account-app-entry, the items citingplugin-security/src/platform-baseline-sets.ts,security-plugin-security-service.ts,metadata/src/metadata-manager.ts, and each card's own reprorelease-18.4.0-w1-upgrade(3) on an 18.3.0-written database#32929 is out (p0 → p1, 09:03Z ruling). The R2-TOUCH increment at
ee9ad834is done: #33025, #33048, #33058, all closed out here. The increment fromee9ad834to the release sha (172 items ata596c03c) is not in part A. It runs at the freeze if the maintainer wants it.objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Ruling recorded · Round 2 includes the increment to the release sha · 2026-11-13T09:09Z
Maintainer, verbatim (triage#1 session): 「跑」, answering whether to run the
ee9ad834→ release-sha increment that qa#3 listed as outside part A (172 items ata596c03c, comment 6848734632). Round 2 = part A + that increment. The Version Packages PR #29963 waits for both.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
⛔ 18.4.0 merge freeze · from now until the Version Packages PR #29963 merges · 2026-11-13T09:16Z
Maintainer, verbatim (triage#1 session): 「同意,发冻结通知」, on triage's freeze proposal. Round 2 tests
main8e3d4a54plus the increment to the release sha. Any shipping change merged after that point either needs re-testing or ships untested..claude/**,scripts/pm/**, CI config)automerge_disable, thenpr_draft) by its seat.Request: triageto triage#1.Generated by Claude Code
objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
Path: none
Freeze amendment · PRs already in the merge queue may finish · 2026-11-13T09:18Z
Maintainer, verbatim (triage#1 session): 「已经在队列中的可以继续合并玩吧」.
ee9ad834→ release sha) should take its sha after these four land, so they are tested too. qa#3 is notified.Generated by Claude Code
11 remaining items
objectstack-fleet commentedon Nov 13, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
18.4.0 published · merge freeze lifted · 2026-11-13T12:40Z
18.4.0(cli, spec, skills, console, create-objectstack, …), and the GitHub Releases are up (create-objectstack@18.4.0 at 2026-11-13T12:33Z). Publish run 43415674353 (attempt 3) followed a credential fix after attempt 1 refused all 8 uploads with 404.c4196099(qa#3, 6852613241).repo:cloudcards waiting on this release (cloud: the builder authors a computed value meant to be totalled as a field of its return type with anexpression, not a formula, and the analytics tools follow the new remedy (#32443, cloud#3567) #32598, cloud: when the release carrying #32527 rolls out, run the existing stored-expression fill once across hosted tenants, so totals over formulas already turned into stored fields stop reading low #32596) are unblocked.objectstack-fleet commentedon Nov 14, 2026
domain:devx#2 · sunhaolin · session_017xRBcRZn9wGkMSrznVX4JS
Serial note ·
domain:devx#2· 2026-11-14T14:53Z · ⛔ not a claimdocs/qa/platform-checklist/areas/*.json, the same files as the fold now in flight: checklist: re-point two api clauses to the shape #32935 landed, and fix the read-file CPU-budget step (QA 18.4.0 R2 api slice) #33032 (chain head) + Re-point studio-authoring.flow-status-matches-runtime acceptance[1]: a known "not running" cause is worded in the rail and header titles, and the platform reason is the Problems note's detail #33054 + Re-point approvals.record-page-decisions acceptance[4]: a forged decision by a caller who cannot read the request answers 404 REQUEST_NOT_FOUND, not 403 FORBIDDEN #33060 + checklist: re-point three api clauses that lag the product at 8e3d4a54 (QA 18.4.0 R2 part B, B-api slice) #33086 + Re-point platform-core.bare-name-one-holder-refusal acceptance[0] and [3] fromwebhooktotool: webhooks are held per namespace since #32577 #33091, one PR, claim 6879105562. Those five are the re-point cards round 2 extracted from this card (6852613241).main; area files keep moving under product PRs (fix(runtime,plugin-security): the declared-webhook activation door switches one of two holders a namespace cannot tell apart, and the upgrade report names each withheld holder #33204, fix(app-shell): an open Studio shows drafts and publishes made outside its tab without a reload #33165 today).qa-fixture.mjs walled-bootflags,contributor-member --position, plugin-emailstartFakeSmtpport) are not item text. They land in other trees and are cards or Acceptance notes, not edits here.objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX
Claim: PM loop round 2 · 2026-11-14T16:45Z
Session:
session_01FEkQ5p5JxKhxXJ6qSCz6f9(card thread, dev) · seatsession_01FEkQ5ooRyyS95kdyC2dPEXAccount:
os-project-managerBranch:
claude/project-thread-yvad69Worktree:
objectstack-issue-32908Domain:
domain:devxSeat:
domain:devx#4File surface:
docs/qa/platform-checklist/areas/*.json(andcoverage.jsononly if a gate regenerates it). ⛔ Noscripts/qa/**, no product package; ⛔ not the threeapprovalsclauses #33275 carries.Container & model: M,
mode:thread,model: default tier,effort: defaultClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (the wave anchor's §1 close-out of parked checklist-accuracy lines)
Thread-read: 6879208977
Premise: holds: devx#2's fold PR #33273 that held these files merged as
fdb76fb89d; per devx#2's serial note 6879208977 the dev starts from the re-measured residue, not the parked textSerial constraints cleared: #33273 merged; sibling #33275 (this seat, parallel) edits three items in
areas/approvals.json— whichever lands second mergesorigin/mainScope: one PR closing out §1 with a per-line disposition ledger (re-pointed here / already right / carried by #N / out of scope → finding the seat files).
Fixes #32908only when every parked line has a disposition, elsePart of #32908. Order:/mnt/project-files/pm-orders/devx/order-32908.md. Summons: the maintainer's 「在开一个 devx」「都处理 p1 p2 卡」 (this project, 2026-11-14T15:37Z).objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5p5JxKhxXJ6qSCz6f9
os-dev-report
{
"issue": 32908,
"status": "blocked",
"branch": "claude/project-thread-yvad69",
"pr": null,
"session": "session_01FEkQ5p5JxKhxXJ6qSCz6f9",
"premise_still_valid": true,
"summary": "Budget stop per the order: the parked residue needs item-text re-points on about 159 checklist items (171 ledger rows), about four times the ~40-item line, so no area file was edited and no PR opened. Ledger built for all 269 parked lines (body section 1 plus the twelve qa#3 parked comments, deduplicated by item and clause) at origin/main 87330e8: re-point owed 171 rows, already right 16 (PR #33273, #32945, #32946, #33016 and as-written rows), carried 5 (#33275 x3, #32941), out of scope → finding 77. Proposed split by area file, so no two cards share a file: A identity-auth+ai+search+ux-conventions 38 items; B studio-authoring+records-forms+attachments-storage 34; C access-security+api-backend+approvals 36 (after #33275 lands); D platform-core+cli 30; E integration-system+automation+area recipes 21. Ledger file: /mnt/project-files/pm-orders/devx/32908-ledger.md. Rows were re-measured from source on main, not re-driven live; each split card re-measures before editing.",
"tests": "none: no diff. Re-measurement = per-item read of docs/qa/platform-checklist/areas/*.json at 87330e8 (revision, last history row, grep of the stale or missing wording), scripted; output in the ledger evidence column.",
"gates": "n/a: no diff. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 87330e8 exit 2: this branch changes nothing against origin/main, nothing to derive. No local family owed; no PR, so no check-runs.",
"dogfood_battery": "n/a: no PR",
"mcp_calls": "9: GitHub MCP reads only: issue_read x8 (#32908 get + 3 comment pages, #32940, #32953 get + comments, #32949), pull_request_read x1 (#33273). Plus 4 REST search reads (gh api search/issues) for the INVALID_FILTER ruling. No MCP write.",
"api_writes": "1: this os-dev-report comment on #32908 through the relay (scripts/pm/post-stamped.mjs). No push, no pr_create, no labels.",
"open_questions": [
{
"question": "api-backend.error-envelope-ledger: is the plain-object comparand INVALID_FILTER face (404-character message, no hint), which PR #32332 declared a control, covered by #32169 item 2, or does the item need a clause for it? No ruling found on #32908, #32949, #32169 or #32279 (REST search, 4 queries).",
"status": "needs_decision",
"options": [
"A: re-point the item to record the face as the declared control (text only, in batch C)",
"B: treat the face as an open part of #32169 item 2 and file a product card to split it into head plus hint"
],
"recommendation": "A. Real business need: no caller or user report reads this face; it was measured only by QA. Long-term: PR #32332 already decided the boundary, and A records it instead of reopening it. Preventing AI mistakes: the face is still a loud, coded 400 refusal, so an AI author cannot mistake it for success; B adds no new protection. Startup focus: B widens a closed card for a face nobody pulls. If the maintainer wants every data-door refusal to carry a hint, B is the consistent long-run shape, at the cost of a product PR."
}
],
"security_findings": "none",
"out_of_scope_findings": [
"class: partial coverage / ledger-marker half · reach: QA live record #32953 · access-security.rls-both-sides acceptance[5]: D11 spot-check blocked(dependency, #7463) · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32953 · access-security.crud-permission-matrix acceptance[5]: guest_portal blocked(dependency, #23267) · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32953 · integration-system.datasource-credential-refusal-matrix acceptance[0]: build door and connector inline-auth door not driven · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32953 · records-forms.crud-roundtrip acceptance[6]: clone readonly half blocked(fixture): no lead_score plant · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32940 · 11 ledger-marker items: 11 items blocked by their ledger markers (multi-replica x6, Oracle x2, SQL Server, AI chat Cloud/EE, locale-scoped seed): need fixtures/dependencies, not text · carrier: none · noted, not filed",
"class: needs a live drive · reach: QA live record #32949 · integration-system.email-template-render acceptance[7]: no-provider 501 arm read from email-routes.ts only; needs a live drive · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32949, #33093 · identity-auth.auth-method-matrix variants SSO/device: SSO and device variants blocked(environment); split drivable from blocked rows would let a run score · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32949 · studio-authoring.expression-editors [0][1][3][5][6]: only the retest rows re-driven; rest out of retest scope (not-run hand-over) · carrier: none · noted, not filed",
"class: partial coverage / ledger-marker half · reach: QA live record #32949 · ux-conventions.disabled-control-reason: only the three #32102 rows re-driven (not-run hand-over) · carrier: none · noted, not filed",
"class: runner tooling (scripts/qa, plugin-email testkit; outside this card surface) · reach: QA live record #32953, #33048, #33092, #33094 · runner: qa-fixture walled-boot: scripts/qa/qa-fixture.mjs walled-boot spawns objectstack dev without --no-compile --no-watch (~L335) · carrier: none · noted, not filed",
"class: runner tooling (scripts/qa, plugin-email testkit; outside this card surface) · reach: QA live record #32953 · runner: qa-fixture contributor-member: contributor-member has no --position flag; approvals persona needs a separate showcase_finance POST · carrier: none · noted, not filed",
"class: runner tooling (scripts/qa, plugin-email testkit; outside this card surface) · reach: QA live record #32949 · runner: plugin-email startFakeSmtp: plugin-email testkit startFakeSmtp takes no port option · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #32953 · cli.organization-ownership-ceremony #32102 A-2/A-3: A-3 of #32102 (refused boot rotates the restored telemetry shard) and A-2 (printed apply command has no --out) still open as product findings of #32102 (carrier #32102) · carrier: #32102",
"class: product observation · reach: QA live record #32953 · contract question: retention on a refused boot: should a boot the ownership guard refuses run telemetry retention at all (#32953 R6 asks the maintainer); product question, not item text · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #32940, #33048 · platform-core.activation-ledger-package-key-upgrade observations; route (a): stray no-such-column DATABASE_ERROR on pre-upgrade migrate plan; raw UNIQUE DATABASE_ERROR before the friendly ERROR; '1 row(s) name no package' while 4 rows name none; conflict-boot sentence calls a package-held row an environment item · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #32949 · integration-system.notify-inbox-delivery #32143 residual: the trigger response's summary.nodes[] notify row carries no warning (#32143 residual): product observation · carrier: none · noted, not filed",
"class: needs_decision · reach: QA live record #32949 · api-backend.error-envelope-ledger INVALID_FILTER face: plain-object comparand INVALID_FILTER face (404-char message, no hint) declared a control by PR #32332; no ruling found on whether #32169 item 2 covers it · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33025, #33081 · studio-authoring.removed-key-save-door-refusal: view/form refusals carry a sibling bare 'Invalid input' issue at path ''; suggester proposes aria→areas; empty key renders as empty backticks: product observation (card-able), item text only if the clause should name it · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025, #33081 · fixture: approvals email-action-token: no door mints a raw/live approval action token (approvals.email-action-token-door, five rows) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025 · fixture: walled-leg grant: activation-write-operator-gate A4 walled-leg grant must be placed outside HTTP · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025 · fixture: upload-session-abort seams: attachments-storage.upload-session-abort abort-failure and 'failed'-producer seams exist only in unit tests · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025, #33081 · fixture: metadata-plane 503: api-backend.action-activation-door-contract A4(b) metadata-plane 503 arm has no door · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025, #33081 · fixture: colliding-face pair: ai.mcp-namespace-faces N2: no colliding-face pair stageable through the authoring doors · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025, #33081 · fixture: browser-slice pins: platform-core.metadata-registry-serving A6 form screenshot and customization-pair-ensure-door ui/e2e pin need a Console build (browser slice) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33025 · fixture: sys_attachment grant: stock personas need a sys_attachment permission grant before attachment hooks are reachable · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33025 · RUNNER env: --no-compile shared dist / OS_PORT: --no-compile serves whatever dist another runner compiled; a connector boot self-pinged another runner's port · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33025 · RUNNER env: os package install shared folder: os package install writes into shared examples/app-showcase/.objectstack/installed-packages/, no API door undoes it · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33048 · fixture: settings-hub user-scope secret: platform-core.settings-hub-roundtrip: no stock user-scope secret · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33048 · fixture: activation-ledger second holder: activation-ledger ambiguous-row leg needs a second holding package · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33048 · fixture: self-signup declared audience: identity-auth.self-signup-gate email_domain/open variants need a declared audience · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · fixture/product: contributor task_own_rows: showcase_contributor task_own_rows compares assignee == current_user.email while assignee stores a user id: needs a ruling on what assignee stores (package-customize-restore-display end-user render) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33048, #33094, #33096 · RUNNER env: scratch-copy recipe: plain cp -a of examples/app-showcase does not boot (relative pnpm links): symlink packages/node_modules · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33048, #33093 · RUNNER env: connector self-URL: on a --no-compile boot with OS_PORT exported, showcase_declarative_connector_ping dials :3000 (RUNNER says it follows OS_PORT) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33048 · RUNNER env: studio-customize-journey timeout: live spec needs more than the default 30 s on a loaded 4-CPU box · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · access-security.share-link-landing-page cosmetic: header prints object API name and field API names; system fields listed: cosmetic observation · carrier: none · noted, not filed",
"class: needs a live drive · reach: QA live record #33048 · automation.package-flow-override: topology edit API-written; node removal through Studio canvas not driven: needs a live drive · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · automation.flow-reference-package-resolution remedy copy: environment-holder refusal remedy 'Declare a dependency…' reads oddly when the holder is the environment: copy nuance · carrier: none · noted, not filed",
"class: needs a live drive · reach: QA live record #33048 · platform-core.bare-name-one-holder-refusal acceptance[2]: qa_a's auth.password_reset not visible on a package-less read; email-service resolution not driven: needs a live drive · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · records-forms.concurrent-edit-conflict multi-field raw JSON: multi-field conflict renders raw JSON: UX nit · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · studio-authoring.access-permission-set-lifecycle remedy copy: ITEM_LOCKED sentence points to 'Clone' while Studio labels it 'New similar': copy drift · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33048 · approvals.quorum-m-of-n knownGaps[1]: seed gap remains: Ada holds only showcase_auditor · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33048 · studio-authoring.authoring-validation-not-persisted A3 banner: upper banner runs past the viewport at 1440 px: cosmetic; Monaco auto-close needs paste (runner tip) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058 · fixture: datasource --schema driver: schema-bearing datasource driver for datasource-introspect --schema · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058 · fixture: mandatory notification topic: a mandatory notification topic reachable without a constructor option · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058 · fixture: AI-chat agent catalog: agent catalog for the keyboard-shortcut AI-chat half · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058 · fixture: inactive app seed: inactive app / single-active-app seed for command-palette N3 · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058, #33093 · fixture: real OAuth client: real OAuth client credentials for linked-accounts-social's external provider · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33058 · fixture: stock flow loop: a loop in the stock flow fixture for flow-edge-type-authoring Back-edge step · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33058, #33093 · approvals.record-page-decisions member 404 logs: member page logs 404 meta/object sys_business_unit and sys_comment_reaction (#32955 family) · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33058 · cli.flag-command-error-ux topic-level pointer: topic-level unknown subcommand prints no --help pointer: UX observation · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33081 · ai.mcp-validate-expression inScope.fields: inScope.fields lists the hidden __search companion (search.field-scoped-narrowing A2 calls it invisible): flag for search/MCP owners · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33081 · fixture: read-inherits-parent-rls bounded probe: bounded-probe warning half unreachable on stock · carrier: none · noted, not filed",
"class: coverage gap: new clause or item (checklist-author) · reach: QA live record #33081 · api-backend.package-rest-lifecycle missing clause: no clause for 'manifest served after a restart equals the last written' (card-B-api-4): coverage gap, new clause needs a decision · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33081 · RUNNER env: tsc pins need dts: rest-route-generation-tombstones tsc block and external-schema-introspection A2 need a spec build with declarations (OS_SKIP_DTS=1 fails TS7016) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33081, #33092 · RUNNER env: vitest/dogfood OOM: vitest 4 rejects --poolOptions.forks.maxForks; run dogfood one file per invocation at --maxWorkers=1 · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33081 · RUNNER env: localhost origin: sign-in must use http://localhost:PORT (127.0.0.1 answers 403 INVALID_ORIGIN) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33081 · RUNNER env: curl If-Match: curl -H 'If-Match:' drops the header; use 'If-Match;' · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33081 · RUNNER env: uploads in tree: a boot without OS_STORAGE_LOCAL_ROOT writes uploads into the tree · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33087 · fixture: member-less walled user: a member-less user on a walled boot (no-active-org A0 producer (1)) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33087 · fixture: cli-18-prerelease-db shard re-dating: restore does not re-date rotation shards; sys_activity__r20261027 falls outside the 7-day window (fixture-as-of exists in the harness only) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33087, #33094 · fixture: marketplace egress: marketplace catalog content blocked(environment) by the egress proxy (knownGap) · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33087, #33093 · identity-auth.default-organization-boot-invariant observation: create-user answers membershipCreated:false although a sys_member row lands (bootstrap join); unstamped sys_business_unit_member rows warn · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33088 · fixture: host-package-stamped env rows: a stock boot that stamps environment rows with the host package (or a hosted-runtime recipe) for #32986/#33003-class items · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33089 · records-forms.multi-currency-invoice seed: seed thin: only INV-1004 and INV-1008 carry a non-zero foreign amount · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33090 · fixture: upgrade connector + assignment rule: a connector instance and an assignment rule in the 18.3.0 upgrade fixture (R11/R13) · carrier: none · noted, not filed",
"class: coverage gap: new clause or item (checklist-author) · reach: QA live record #33092 · coverage gap: SCIM deactivation key revocation (#33075): no item asserts #33075's SCIM-deactivation key revocation live; revoked key answers 403 API_KEY_REVOKED: a new item needs the seat's call · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33092 · docs: connect-mcp.mdx FORBIDDEN wording: content/docs/ai/connect-mcp.mdx says FORBIDDEN where a non-reader gets 404: docs surface, not this path · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33092 · coverage: #33068 droppedFields reachability: droppedFields over HTTP needs a fixture past the lint (OS_ALLOW_UNLINTED_METADATA_WRITES=1 or a pre-rule stored flow) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33092 · RUNNER env: setsid pid: cd APP && setsid cmd & records the subshell pid; record $! of a bare setsid · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33093 · fixture: SSO JIT + SCIM deactivation: SCIM adopts an SSO account only on a verified domain (DNS TXT, OS_SSO_DOMAIN_VERIFICATION) · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33093 · fixture: magic-link/passkeys UI: magic-link / passkeys UI (objectui#4179 not_planned) · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33093 · identity-auth.session-list-revoke revoked view copy: revoked view keeps 'Active user sessions' subtitle and toolbar button: cosmetic · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33093 · identity-auth.api-key-ui-lifecycle Edit offered: row menu offers Edit while only revoked is editable: observation · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33096 · automation.connector-dispatch-matrix health version: GET /api/v1/health answered version 18.3.0 on the 8e3d4a5 tree; picker keeps stale Input rows on action switch · carrier: none · noted, not filed",
"class: product observation · reach: QA live record #33096 · integration-system.webhook-lifecycle boot-order decrypt: boot-order transient: signing secret undecryptable before LocalCryptoProvider wired (fail-closed): observation · carrier: none · noted, not filed",
"class: fixture gap · reach: QA live record #33094 · records-forms.gantt-interactions fixtures: passed only on fixtures extended by metadata overlays (reverted) · carrier: none · noted, not filed",
"class: RUNNER.md environment fact (docs/qa/platform-checklist/RUNNER.md; outside this card surface) · reach: QA live record #33094 · RUNNER env: vite DEV_PROXY_TARGET; write results item by item: vite live console must use DEV_PROXY_TARGET, not VITE_SERVER_URL; write the result file item by item · carrier: none · noted, not filed"
]
}
Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX
§1 close-out · split and routing · 2026-11-14T17:03Z
The dev's one-pass ledger of every parked line (report 6881013689, read at
87330e89): 269 lines · 171 owe an item-text re-point (159 items) · 16 already right · 5 carried (#33275 ×3, #32941 ×2) · 77 out of scope. Too large for one PR, so the seat split it.Item-text re-points: five cards, one area-file family each, no shared file (all
domain:devxseat 4, p1):pm:blockedon checklist: re-point three approvals clauses that still expect 403 where a non-reader gets 404 REQUEST_NOT_FOUND (sibling half of #33060) #33275 (PR qa(checklist): name the persona and status of three approvals refusals a non-reader gets as 404 #33327, same file)Runner kit: #33334 (p2) carries the 12 RUNNER.md environment facts and the two
scripts/qa/qa-fixture.mjsgaps (rows 12, 13).Held for a maintainer ruling (1):
api-backend.error-envelope-ledgerINVALID_FILTER face (row in the report'sopen_questions; options A record-as-control / B reopen #32169 item 2). The ruling goes to batch C.Routed to triage (no devx carrier): the rows below. Product observations may be product defects in other lanes; the fixture gaps mostly need a door, a seed or a build rather than text; the not-run halves are hand-overs for the next sweep. Triage is knocked to route them.
Product observations (20)
cli.organization-ownership-ceremony#32102 A-2/A-3: A-3 of #32102 (refused boot rotates the restored telemetry shard) and A-2 (printed apply command has no --out) still open as product findings of #32102 (carrier #32102)platform-core.activation-ledger-package-key-upgradeobservations; route (a): stray no-such-column DATABASE_ERROR on pre-upgrade migrate plan; raw UNIQUE DATABASE_ERROR before the friendly ERROR; '1 row(s) name no package' while 4 rows name none; conflict-boot sentence calls a package-held row an environment itemintegration-system.notify-inbox-delivery#32143 residual: the trigger response's summary.nodes[] notify row carries no warning (#32143 residual): product observationstudio-authoring.removed-key-save-door-refusal-: view/form refusals carry a sibling bare 'Invalid input' issue at path ''; suggester proposes aria->areas; empty key renders as empty backticks: product observation (card-able), item text only if the clause should name itaccess-security.share-link-landing-pagecosmetic: header prints object API name and field API names; system fields listed: cosmetic observationautomation.flow-reference-package-resolutionremedy copy: environment-holder refusal remedy 'Declare a dependency…' reads oddly when the holder is the environment: copy nuancerecords-forms.concurrent-edit-conflictmulti-field raw JSON: multi-field conflict renders raw JSON: UX nitstudio-authoring.access-permission-set-lifecycleremedy copy: ITEM_LOCKED sentence points to 'Clone' while Studio labels it 'New similar': copy driftstudio-authoring.authoring-validation-not-persistedA3 banner: upper banner runs past the viewport at 1440 px: cosmetic; Monaco auto-close needs paste (runner tip)approvals.record-page-decisionsmember 404 logs: member page logs 404 meta/object sys_business_unit and sys_comment_reaction (#32955 family)cli.flag-command-error-uxtopic-level pointer: topic-level unknown subcommand prints no --help pointer: UX observationai.mcp-validate-expressioninScope.fields: inScope.fields lists the hidden __search companion (search.field-scoped-narrowing A2 calls it invisible): flag for search/MCP ownersidentity-auth.default-organization-boot-invariantobservation: create-user answers membershipCreated:false although a sys_member row lands (bootstrap join); unstamped sys_business_unit_member rows warnidentity-auth.session-list-revokerevoked view copy: revoked view keeps 'Active user sessions' subtitle and toolbar button: cosmeticidentity-auth.api-key-ui-lifecycleEdit offered: row menu offers Edit while only revoked is editable: observationautomation.connector-dispatch-matrixhealth version: GET /api/v1/health answered version 18.3.0 on the 8e3d4a5 tree; picker keeps stale Input rows on action switchintegration-system.webhook-lifecycleboot-order decrypt: boot-order transient: signing secret undecryptable before LocalCryptoProvider wired (fail-closed): observationFixture gaps (28)
approvals.quorum-m-of-nknownGaps[1]: seed gap remains: Ada holds only showcase_auditorrecords-forms.multi-currency-invoiceseed: seed thin: only INV-1004 and INV-1008 carry a non-zero foreign amountrecords-forms.gantt-interactionsfixtures: passed only on fixtures extended by metadata overlays (reverted)Runner tooling in a
domain:serverpackage (1)Not-run hand-overs: partial coverage (8), needs a live drive (3), coverage gaps (2)
access-security.rls-both-sidesacceptance[5]: D11 spot-check blocked(dependency, #7463)access-security.crud-permission-matrixacceptance[5]: guest_portal blocked(dependency, #23267)integration-system.datasource-credential-refusal-matrixacceptance[0]: build door and connector inline-auth door not drivenrecords-forms.crud-roundtripacceptance[6]: clone readonly half blocked(fixture): no lead_score plantidentity-auth.auth-method-matrixvariants SSO/device: SSO and device variants blocked(environment); split drivable from blocked rows would let a run scorestudio-authoring.expression-editors[0][1][3][5][6]: only the retest rows re-driven; rest out of retest scope (not-run hand-over)ux-conventions.disabled-control-reason-: only the three #32102 rows re-driven (not-run hand-over)integration-system.email-template-renderacceptance[7]: no-provider 501 arm read from email-routes.ts only; needs a live driveautomation.package-flow-override-: topology edit API-written; node removal through Studio canvas not driven: needs a live driveplatform-core.bare-name-one-holder-refusalacceptance[2]: qa_a's auth.password_reset not visible on a package-less read; email-service resolution not driven: needs a live driveapi-backend.package-rest-lifecyclemissing clause: no clause for 'manifest served after a restart equals the last written' (card-B-api-4): coverage gap, new clause needs a decisionThis card stays open until #33328–#33332 and #33334 land and triage has routed the rows above.
objectstack-fleet commentedon Nov 14, 2026
triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH
分诊路由 · 6881136418 的 62 行 · 2026-11-14T17:17Z
查重未命中现有开卡,按车道/区归并为 12 张卡(未逐行开卡):
__searchapi-backend.error-envelope-ledgerINVALID_FILTER 一行仍按本卡所述待维护者裁决,分诊未动。objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX
§1 close-out landed · 2026-11-14T19:51Z
Every devx carrier of the §1 split (6881136418) has merged:
34eba7de56e7707b1493c71e75a7c0b63c8949347b27869d4f98c3a80440fca5f89cceRow 94 went on to #33371 (PR #33406, in the queue). Still open elsewhere: the INVALID_FILTER face (maintainer ruling), triage's routed rows (#33338–#33346, #33351–#33353).
pm:dispatchedremoved in this stroke; the seat's §1 work on this anchor is done.objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX
§1 close-out · ledger row 55 ruled · 2026-11-14T21:15Z
api-backend.error-envelope-ledgerplain-object comparandINVALID_FILTERface, the maintainer chose B (「B 立 p3 卡补短标题」, a decision card in this account's project, 2026-11-14T21:12:49Z). Under B the face is a product follow-up, not a control.domain:server, p3,pm:queue). It heads this face and also carries the other three follow-ups that PR fix(spec, types): retired-key, aggregation and comparand refusals answer a one-line message on the data doors, with the prescription as hint #32332 listed.objectstack-fleet commentedon Nov 14, 2026
domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX
Closed · #32908 v18.4.0 sweep anchor · 2026-11-14T22:09Z
Triage's close condition is met (notice 6884946429 on mailbox #33289):
Rows that still need a live run are carried by #33353 for the next
checklist-testsweep.