Skip to content

checklist: re-point 36 stale items in access-security, api-backend, approvals (v18.4.0 sweep close-out, batch C of #32908) #33332

Open

Description

@objectstack-fleet

domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX

Filing gate: ① checklist assertion defects (#32997 rule 9): each item below will score FAIL or mislead a QA run while the product is right, or names a fixture recipe that no longer works.
Parent: #32908, the v18.4.0 sweep anchor. Its §1 close-out was measured in one pass on origin/main 87330e89 (report 6881013689 on #32908): 269 parked lines, 171 of them owe an item-text re-point over 159 items. That is too large for one PR, so the seat splits it by area file into five batches with no shared file. This card is batch C.

Blocked-by: #33275

This batch starts after #33275 lands: it re-points three other clauses in areas/approvals.json.

Business reason: every stale clause costs the next release sweep a false FAIL and a re-judgement, and a stale fixture recipe costs a run its setup time.
Reader: the domain:devx seat 4 (claim follows), then QA runs reading these areas.
Dedupe: the rows below are the parked lines of #32908 that are still stale on 87330e89. PR #33273 (merged) and #33275 (in flight) re-point other items and are excluded. No other open card re-points these items.

One parked line of this file family is held for a maintainer ruling and is NOT in this batch: the api-backend.error-envelope-ledger INVALID_FILTER face (the #32908 dev report's open question).

Fix shape

For each row: re-measure on current main first (area files move under product PRs); re-point the text to the product, bump revision, add a history row citing this card and the source record. A row the re-measure finds already right is left alone and said so in the PR. pnpm check:platform-checklist green. Files: docs/qa/platform-checklist/areas/access-security.json, docs/qa/platform-checklist/areas/api-backend.json, docs/qa/platform-checklist/areas/approvals.json only.

Rows (from the #32908 close-out ledger; evidence read at 87330e89, not driven live)

# line source record · comment disposition evidence
5 access-security.ai-service-account-agent-ceiling acceptance[0],[3] steps: clause 1 reads session-only GET /auth/me/permissions with a key; re-point to admin POST /security/explain; use an owner-private object (showcase_task is public-read) #32940 (body §1) · #33025 · 6844741021 re-point owed → split batch C r1, last history 2026-11-10 #32019; stale "me/permissions" present
15 approvals.account-app-entry acceptance[3],[4],[6]: request opens under the record-owning app since #32850 (objectHostAppSegment), not the component route's appId; Language picker offers 简体中文 zh-Hans, not 中文(中国) zh-CN #32953 (body §1) · #33087 · 6850382730 re-point owed → split batch C r9, last history 2026-11-08 —; stale "zh-CN" present
22 approvals.account-app-entry landing: a non-admin persona with a single app lands in that app after sign-in, not on /home #32953 (body §1) re-point owed → split batch C r9, last history 2026-11-08 —; item unchanged since the record
24 access-security.walled-environment-metadata-operator-only knownGaps[0]: knownGaps[0] still says no example app declares the multi-org runtime (the showcase does); fixture: the operator's POST /packages id must be reverse-domain #32953 (body §1) re-point owed → split batch C r8, last history 2026-11-01 #28545; stale "no example app" present
25 access-security.no-active-org-session-semantics steps[8], acceptance[4]: steps[8] has a member create showcase_account/project, refused by CRUD 403 first (mistakable for the org refusal); showcase_task now requires project; name showcase_task(+project) or showcase_private_note; re-sign-in restores an active org, clear per session; acceptance[4]: sys_audit_log rows live in the telemetry DB #32953 (body §1) · #33025 · 6844741021 · #33087 · 6850382730 · #33092 · 6850793622 re-point owed → split batch C r10, last history 2026-11-10 #32111; stale "showcase_account" present, missing "telemetry" (gap stands)
31 access-security.permission-set-package-resolution steps[3]: once qa_b depends on qa_a its same-named items are refused 403 NOT_OVERRIDABLE (ADR-0146 D2): shared fixture must rename them; name an object no stock member set grants #32940 (body §1) · #33094 · 6852480973 re-point owed → split batch C r2, last history 2026-11-10 #32330; missing "NOT_OVERRIDABLE" (gap stands)
33 api-backend.automation-namespace-address 405 Allow; steps[2]: 405 Allow is 'GET, HEAD'; a {} body answers 400 FLOW_FAILED (Unknown variable: tasks): send {params:{tasks:[]}} #32940 (body §1) · #33081 · 6850173588 re-point owed → split batch C r3, last history 2026-11-10 #32330; missing "tasks" (gap stands)
35 access-security.credential-use-audit-row -: address and UA are row columns, not metadata keys #32940 (body §1) re-point owed → split batch C r1, last history 2026-11-10 #32019; item unchanged since the record
36 api-backend.client-sdk-namespace-address automated.ref count: the pin holds 83 tests (item says 79) #32940 (body §1) re-point owed → split batch C r3, last history 2026-11-10 #32330; stale "79" present
56 api-backend.api-methods-verb-gate acceptance[1], negative[1]: restore/purge derive from delete since ADR-0148/#30237: ['get','delete'] answers allowed get,delete,restore,purge #33025 · 6844741021 · #33081 · 6850173588 · #33092 · 6850793622 re-point owed → split batch C r4, last history 2026-10-31 #27392; stale "restore" present
57 api-backend.retired-def-refusal rev 2 / steps[3]: manifest.loading tombstone removed (ADR-0087 addendum, #25767 D2=A); registry 249 entries (53@17, 196@18), not 224 #33025 · 6844741021 · #33081 · 6850173588 re-point owed → split batch C r4, last history 2026-10-20 #24824; stale "manifest.loading" present
58 api-backend.aggregate-contract-matrix steps[5]/acceptance[3]: since #32279 the array_agg/string_agg prescription sits in fields[].hint, not message #33025 · 6844741021 · #33081 · 6850173588 re-point owed → split batch C r8, last history 2026-11-10 #32168; stale "string_agg" present
69 access-security.activation-write-operator-gate steps[4]: steps[4] says ledger reads are open, but a member gets 403 on sys_metadata_activation #33025 · 6844741021 re-point owed → split batch C r12, last history 2026-10-27 #26571; stale "sys_metadata_activation" present
75 approvals.status-mirror-field acceptance[2b]; negative[2]: N2 'running at all off the user-less mirror is a FAIL' stricter than design: say 'its data operation landing'; SLA recipe needs a wall-clock shim (not driven in R2-TOUCH) #33025 · 6844741021 · #33081 · 6850173588 re-point owed → split batch C r6, last history 2026-10-31 #27409; stale "running" present
98 access-security.share-link-landing-page route: route on a CLI-served boot is /_console/s/:token (bare /s/ answers ENDPOINT_NOT_FOUND) #33048 · 6846028996 re-point owed → split batch C r6, last history 2026-10-27 #26626; stale "/s/:token" present
100 access-security.security-catalog-one-holder-and-boot-report steps[3]; acceptance[4]: data API refuses planting the A4 grant (SQL on a stopped server); A4 INFO line needs --log-level info; '<=50 names' is <=50 grant ids per org #33048 · 6846028996 · #33094 · 6852480973 re-point owed → split batch C r4, last history 2026-10-27 #26571; stale "50" present
102 approvals.request-page-reply-and-reader-visibility acceptance[2]; steps[3]: A2's 404 leg reachable with a runtime grant (PUT permission + sys_user_permission_set): drop blocked(fixture); S3 scratch object needs sharingModel #33048 · 6846028996 · #33094 · 6852480973 re-point owed → split batch C r5, last history 2026-10-31 #27409; stale "blocked(fixture)" present
132 access-security.capability-declaration-lifecycle fixtures.requires: clone lands in com.example.showcase.custom, not package-less #33048 · 6846028996 · #33094 · 6852480973 re-point owed → split batch C r7, last history 2026-10-26 #25835; stale "no package" present
134 approvals.quorum-m-of-n fixtures.requires (4): the 6000 line needs merchant, category and status in {submitted,approved,rejected}; a 0-total submitted report opens nothing #33048 · 6846028996 re-point owed → split batch C r9, last history 2026-10-31 #27441; stale "6000" present
136 approvals.inbox-metadata-actions acceptance[1],[3]: 'Override Recall' only once the admin's slot on EXP-2001 is spent (say so as for EXP-DEMO); A3 network literal is the action door /api/v1/actions/sys_approval_request/approval_* #33048 · 6846028996 · #33088 · 6850413952 · #33093 · 6850899929 re-point owed → split batch C r8, last history 2026-10-31 #27441; stale "Override Recall" present
138 approvals.decision-action-matrix acceptance[7]; fixtures: A7 tally half vacuous on first_response (decision_progress null); Data Platform refuses budget 200000 (120% rule) #33048 · 6846028996 · #33094 · 6852480973 re-point owed → split batch C r10, last history 2026-10-27 #26621; stale "byte-identical" present
156 api-backend.route-ledger-live-parity title, fixtures, steps, acceptance[3]: 16 *route-ledger.ts files, not ELEVEN; REST_ROUTE_LEDGER 20 families (recycle-bin, user-work); A3 'answers (possibly a permission refusal)'; POST /data/:object/actions/:name is a routing 404 #33058 · 6846283471 · #33081 · 6850173588 · #33092 · 6850793622 re-point owed → split batch C r4, last history 2026-10-16 #24036; stale "ELEVEN" present
157 approvals.notification-deep-link steps[3]/acceptance[3]: route lands under the app owning the request's record (com.objectstack.setup / com.example.showcase), not com.objectstack.account #33058 · 6846283471 · #33094 · 6852480973 re-point owed → split batch C r9, last history 2026-10-28 #27134; stale "com.objectstack.account" present
158 approvals.ooo-delegation-reroute negative[3]: B forging a row answers 403 PERMISSION_DENIED (Ada has no create permission on sys_approval_delegation) #33058 · 6846283471 re-point owed → split batch C r7, last history 2026-10-20 #25003; stale "FORBIDDEN" present
159 approvals.record-page-decisions steps[2],[5],[6],[9]; acceptance[1],[2]: bar posts the action door /api/v1/actions/sys_approval_request/approval_*; first-load approvals arrive in POST /data/.../page; S9 budget trips the 120% rule #33058 · 6846283471 · #33093 · 6850899929 · #33094 · 6852480973 re-point owed → split batch C r6, last history 2026-11-14 #33060; stale "approvals/requests/:id" present
161 approvals.sla-escalation steps[1],[2]: approvals dedupe per record and runtime flows cannot be toggled: one trigger object per variant; branch evidenced by request status; SLA needs a wall-clock shim #33058 · 6846283471 · #33081 · 6850173588 re-point owed → split batch C r4, last history 2026-10-20 #25003; item unchanged since the record
180 access-security.public-form-withdrawal-layers steps[2]-[4]; negative[2]: package-less PUT answers 403 NOT_OVERRIDABLE (ADR-0146 D11): re-point at the customization-pair recipe #33081 · 6850173588 re-point owed → split batch C r5, last history 2026-10-27 #26571; stale "package-less" present
181 access-security.security-catalog-activation-and-clone-doors acceptance[4]: A4 names not-held-by-qualifier; wire carries RESOURCE_CONFLICT + sentence + details.candidates #33081 · 6850173588 re-point owed → split batch C r4, last history 2026-11-12 #32164; stale "not-held-by-qualifier" present
187 api-backend.action-activation-door-contract acceptance[1]: 4-segment path reaches the dispatcher (404 ROUTE_NOT_FOUND) through the ADR-0150 D5 addressed mount #33081 · 6850173588 re-point owed → split batch C r7, last history 2026-10-27 #26572; item unchanged since the record
188 api-backend.rest-crud-config-contract acceptance[2]: stock showcase has no apiEnabled:false object; the OBJECT_API_DISABLED body comes from the HTTP pin's fixture #33081 · 6850173588 re-point owed → split batch C r6, last history 2026-10-27 #26572; stale "apiEnabled" present
189 approvals.decision-only-via-service fixtures: admin holds both signoff positions on stock, so one approve finalizes the dual signoff #33081 · 6850173588 re-point owed → split batch C r5, last history 2026-10-28 #25807; item unchanged since the record
195 api-backend.package-rest-lifecycle acceptance[0]; negative[2]: sys_packages is (id, version)-keyed: name the list door as oracle #33081 · 6850173588 re-point owed → split batch C r4, last history 2026-10-20 #25003; stale "exactly ONE row" present
197 access-security.record-view-read-audit negative[0]: CLI auto-registration half is live-only and N0 is out of scope by the item's own word: the item can never PASS while it stays a clause #33081 · 6850173588 re-point owed → split batch C r7, last history 2026-11-01 #28345; item unchanged since the record
199 access-security.suggested-binding-loop fixtures: pending loop needs an installed package with an isDefault set (com.qa.decl recipe); N1 walled half needs walled-boot; N0 reachable only by the registry-seam pin #33081 · 6850173588 re-point owed → split batch C r3, last history 2026-10-11 #15204; stale "isDefault" present
200 access-security.agent-ceiling-set-assignment-refusal knownGaps: knownGaps worry did not happen: os build accepted a position with mcp_agent_data_read and install went through #33081 · 6850173588 re-point owed → split batch C r1, last history 2026-11-10 #32019; item unchanged since the record
201 access-security.share-link-capability-tokens fixtures: liaison minter recipe: admin POST sys_user_position {usr_showcase_phone_demo, showcase_client_liaison}; private-note control needs a note created first #33081 · 6850173588 re-point owed → split batch C r7, last history 2026-10-16 #24036; stale "liaison" present
211 access-security.walled-environment-metadata-operator-only personas; knownGaps[1]: org owner auto-holds organization_admin (auto-org-admin-grant); install-local leg scored from pins #33087 · 6850382730 re-point owed → split batch C r8, last history 2026-11-01 #28545; missing "organization_admin" (gap stands)
261 access-security.readonly-package-locks-studio acceptance[0]: Form tab stays editable on a read-only base by design (edits the .custom pair) #33094 · 6852480973 re-point owed → split batch C r5, last history 2026-10-16 #24036; item unchanged since the record

Activity

  1. added
    priority:p1High: required for production / M2
    domain:devxDomain lane — seat card indexed by label:pm:seat
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 14, 2026
  2. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX

    Claim: PM loop round 4 · 2026-11-14T18:07Z
    Session: session_01FEkQ5kHpQrXX5yTHRb5h4F (card thread, dev; the #33275 thread, its PR #33327 merged) · seat session_01FEkQ5ooRyyS95kdyC2dPEX
    Account: os-project-manager
    Branch: claude/project-thread-v8xylo
    Worktree: objectstack-issue-33332
    Domain: domain:devx
    Seat: domain:devx#4
    File surface: under docs/qa/platform-checklist/areas/: access-security.json, api-backend.json, approvals.json. ⛔ No other area file (siblings #33328 #33329 #33330 #33331 each own theirs), no product code, no RUNNER.md, no scripts/qa/**.
    Container & model: M, mode:thread, model: default tier, effort: default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (checklist text lags a correct product)
    Thread-read: 6881013689
    Premise: holds: the rows are #32908's ledger readings at 87330e89 (report 6881013689) plus ledger row 85's api-backend half routed from #33331; the dev re-measures each on current main before editing. The api-backend.error-envelope-ledger INVALID_FILTER face stays out (held for a maintainer ruling).
    Serial constraints cleared: #33275's PR #33327 (three other clauses of approvals.json) merged as fca5f89cce; the branch restarts from current main

    Scope: one PR, Fixes #33332, skip-changeset, a per-row disposition table. Order: /mnt/project-files/pm-orders/devx/order-33332.md. Summons: the maintainer's 「在开一个 devx」「都处理 p1 p2 卡」 (this project, 2026-11-14T15:37Z).

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 14, 2026
  4. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#4 · os-project-manager · session_01FEkQ5kHpQrXX5yTHRb5h4F

    os-dev-report
    {
    "issue": 33332,
    "status": "done",
    "branch": "claude/project-thread-v8xylo",
    "pr": "#33400",
    "session": "session_01FEkQ5kHpQrXX5yTHRb5h4F",
    "premise_still_valid": true,
    "summary": "All 39 rows (38 batch C ledger rows plus row 85's api-backend half, routed from #33331) were re-measured from source on origin/main fca5f89 and re-pointed: 36 items across access-security (16), api-backend (9) and approvals (11), one revision bump and one history row each citing #33332, the QA record and the base. No row was wholly already right (row 211's knownGaps half was), none needs a live drive, none needs a ruling. Three places where main had moved past the QA record are recorded in the PR: row 102 (member_default now grants read on sys_approval_request since #32442, so the 404 leg needs no runtime grant), row 134 (the expense line needs only merchant and amount besides the report) and row 195 (the suggested restart clause is new coverage, left for a coverage pass). Two negatives now read the design: status-mirror-field negative[2] and ooo-delegation-reroute negative[3]. The error-envelope-ledger INVALID_FILTER face is untouched.",
    "tests": "No test added or changed (checklist text only; docs are not ablated). pnpm check:platform-checklist exit 0: 16 areas, 427 items; symbol anchors 1638/1648 resolved, 10 on the named residual. Every edited item parses and was checked to carry revision = old + 1 and exactly one new history row with ref #33332.",
    "gates": "head b4df2ea, base fca5f89: dispatch-gates --commands (16): check-adr-links.mjs 0, check-adr-links.mjs --self-test 0, check-closing-keyword-parity.mjs 0, check-closing-keyword-parity.mjs --self-test 0, check-comment-mask-corpus.mjs 0, ci/plan-test-core-shards.mjs --self-test 0, --filter @objectstack/lint run check:doc-formula-expressions 0, check:ci-filter-parity 0, check:cross-package-test-inputs 0, check:doc-authoring 0, check:driver-memory-census 0, check:gitlink-declared 0, check:nul-bytes 0, check:platform-checklist 0, check:refd-timer-probe 0, check:watch-hint-literal 0. check:doc-formula-expressions needed @objectstack/lint built first (pnpm --filter "@objectstack/lint..." build, exit 0). --ran: 16 derived, 16 run, 0 NOT-MEASURED, exit 0. --tier: no path-derived mandate. Scoped pnpm lint: n/a (no package touched). CI check-runs: the seat reads them on PR #33400.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "0",
    "api_writes": "2 — relay fleet-write pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 43627737645, PR #33400, labels skip-changeset, no assignees, read-back identical 16282 bytes); post-stamped os-dev-report comment on #33332. Plus git push of the harness branch (not a REST write).",
    "line_budget": "+316/-135, 3 files, under the 3000 human-merge threshold",
    "files_changed": [
    "docs/qa/platform-checklist/areas/access-security.json",
    "docs/qa/platform-checklist/areas/api-backend.json",
    "docs/qa/platform-checklist/areas/approvals.json"
    ],
    "deviations": "Branch restart: the order said restart claude/project-thread-v8xylo from origin/main; force-push is reserved for claude/issue-* branches (AGENTS.md section 3), so origin/main was merged into the branch instead (merge b0d2643, empty diff against fca5f89 before the edit commit). The remote branch had been deleted after #33327 merged, so the push created it anew. Otherwise none against the order. Model tier per dispatch-gates --tier: no path-derived mandate (PM's call).",
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "none"
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#4 · os-project-manager · session_01FEkQ5ooRyyS95kdyC2dPEX

    ACCEPT → PR #33400 comment 6882561621 (2026-11-14T18:54Z); auto-merge armed. Landing record follows the merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

domain:devxDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions