Skip to content

Commit d07b0fe

Browse files
committed
docs(qa): name the pull request in the 42 history rows this round added
The history rows were committed with a placeholder ref because the pull request had no number before it was opened. This commit changes exactly those 42 strings and nothing else. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0b5ec6b commit d07b0fe

6 files changed

Lines changed: 42 additions & 42 deletions

File tree

‎docs/qa/platform-checklist/areas/access-security.json‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@
345345
"revision": 3,
346346
"date": "2026-10-19",
347347
"change": "steps[1] corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.record-access-explain; wave anchor #24579 §3): the step named 'the console's access explain panel' without saying where it opens; at the console pin 4016370a it is the 'Explain access' action in Studio's Access pillar header (/_console/studio/PKG/access), the route the run drove. No clause changed",
348-
"ref": "#PENDING-24579R2"
348+
"ref": "#24632"
349349
}
350350
]
351351
},
@@ -822,7 +822,7 @@
822822
"revision": 5,
823823
"date": "2026-10-19",
824824
"change": "steps[5] corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.fls-mask-and-strip steps[5]; wave anchor #24579 §3): the step still told the run to author a scratch readable:false set, while fixtures.requires[2] and knownGaps[0] already record that the stock showcase_client_liaison set (examples/app-showcase/src/security/permission-sets.ts) is that grant. The step now grants the stock set to a fresh member who holds no showcase_contributor. No clause changed",
825-
"ref": "#PENDING-24579R2"
825+
"ref": "#24632"
826826
}
827827
]
828828
},
@@ -926,7 +926,7 @@
926926
"revision": 3,
927927
"date": "2026-10-19",
928928
"change": "steps[0] and automated.ref corrected — checklist-accuracy findings of the 18.0 QA sweep (QA run #24559, access-security.scope-depth-asymmetry; wave anchor #24579 §3; round 2's Tier 1 record #24598, which names this item among the refs that over-claim clause coverage). steps[0] POSTed a showcase_inquiry with `subject`; the object has no such field and requires name, email and message (examples/app-showcase/src/data/objects/inquiry.object.ts). The three dogfood pins exercise the business-unit depth axis (unit / unit_and_below / own_and_reports and the fallback profile), not the manager / executive / ops org-read and own-write asymmetry the clauses score, so automated.ref now says so and that no clause rests on them. No clause changed",
929-
"ref": "#PENDING-24579R2"
929+
"ref": "#24632"
930930
}
931931
]
932932
},
@@ -1150,7 +1150,7 @@
11501150
"revision": 3,
11511151
"date": "2026-10-19",
11521152
"change": "steps[6] and acceptance[4] (clause, verify, evidence) re-pointed — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.sharing-rules-widen acceptance[4]; wave anchor #24579 §3) with its oracle from round 2 (QA run #24601). §A13 asked that an admin edit to the SEEDED sys_sharing_rule row survive a restart; the seeder that copied declared rules into that table is retired (ADR-0131 D2, packages/plugins/plugin-sharing/src/declared-sharing-rules.ts) and GET /api/v1/data/sys_sharing_rule answers total 0, so there is no seeded row to edit. The administrator's durable act on a declared rule is now the activation switch (POST /api/v1/security/_activation/sharing_rule/NAME), and the clause asserts that switch across two restarts. QA run #24601 drove exactly this recipe at ba4afcc2 and passed. It measured that GET /api/v1/meta/sharing_rule/NAME keeps reading active: true while the ledger holds the rule off, so the oracle is the ledger row and the member's reads, never the metadata read. acceptance[0]–[3] are unchanged",
1153-
"ref": "#PENDING-24579R2"
1153+
"ref": "#24632"
11541154
}
11551155
]
11561156
},
@@ -1284,7 +1284,7 @@
12841284
"revision": 6,
12851285
"date": "2026-10-19",
12861286
"change": "acceptance[6] (clause, verify, evidence) corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.record-share-grant-revoke acceptance[6]; wave anchor #24579 §3). The clause required source_id to be the rule's sys_sharing_rule ROW id and NOT its name; that holds only for an organization-authored rule. The rule it evaluates, share_key_account_qualified_contacts_with_managers, is DECLARED, and a declared rule is projected with id = name (sharing-rule-service.ts projectDeclaredRule, ADR-0131 D2), so its grants carry the name. The clause now asserts source_id equals the rule's id as evaluate reports it, and the verify names revokeRuleGrants, the current name of the purge it cited as purgeRuleGrants",
1287-
"ref": "#PENDING-24579R2"
1287+
"ref": "#24632"
12881288
}
12891289
]
12901290
},
@@ -1386,7 +1386,7 @@
13861386
"revision": 7,
13871387
"date": "2026-10-19",
13881388
"change": "steps[7] and acceptance[5].verify clarified — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.audit-log-browser; wave anchor #24579 §3): the 405 body advertises allowed [get, list, aggregate, search, export], which a run reading 'get + list only' could take for a widened door. sys_audit_log still declares apiMethods ['get', 'list']; the other three are the read verbs list derives (packages/spec/src/data/api-derivation.ts). The append-only clause is unchanged",
1389-
"ref": "#PENDING-24579R2"
1389+
"ref": "#24632"
13901390
}
13911391
]
13921392
},
@@ -2226,7 +2226,7 @@
22262226
"revision": 4,
22272227
"date": "2026-10-19",
22282228
"change": "steps[0], [1] and [3] corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.permission-matrix-edit-loop step 4; wave anchor #24579 §3): the DELETE probes named seeded task ids, but a permission set silent on writeScope is owner-only (plugin-security permission-evaluator.ts), so a seeded row owned by someone else stays refused after the delete bit flips ON. The probes now use rows M creates. No clause changed",
2229-
"ref": "#PENDING-24579R2"
2229+
"ref": "#24632"
22302230
}
22312231
]
22322232
},
@@ -2338,7 +2338,7 @@
23382338
"revision": 5,
23392339
"date": "2026-10-19",
23402340
"change": "steps[7] and acceptance[1].verify corrected — two checklist-accuracy findings of the 18.0 QA sweep (QA run #24559, access-security.capability-declaration-lifecycle; wave anchor #24579 §3). The located `capabilities.0.scope` refusal appears only for a raw capabilities entry: defineCapability parses its argument (packages/spec/src/security/capabilities.ts), so a malformed shape written through it throws at config load. The item stated no expectation for the admin on showcase_zoo_perm_held. The run measured the admin refused, and actionPermissionError has no administrator exemption (only a system context skips it), so the verify now says so. The run also measured DELETE /api/v1/meta/capability/NAME answering 200 while removing nothing; no clause asserts that door, and it is left to the wave anchor as an observation, not encoded here",
2341-
"ref": "#PENDING-24579R2"
2341+
"ref": "#24632"
23422342
}
23432343
]
23442344
},
@@ -3333,7 +3333,7 @@
33333333
"revision": 2,
33343334
"date": "2026-10-19",
33353335
"change": "fixtures.knownGaps[1] marked CLOSED — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.anonymous-floor-v18-doors; wave anchor #24579 §3): the gap said a non-POST /keys never reaches the floor on a stock boot and answers 405; since #23909 the dispatcher registers /keys for every verb (packages/runtime/src/dispatcher-plugin.ts) and the run measured anonymous GET /api/v1/keys → 401. No clause changed: acceptance[1] already demanded 401",
3336-
"ref": "#PENDING-24579R2"
3336+
"ref": "#24632"
33373337
}
33383338
]
33393339
},
@@ -3481,7 +3481,7 @@
34813481
"revision": 2,
34823482
"date": "2026-10-19",
34833483
"change": "acceptance[2] (clause, verify) and steps[1] corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.meta-authoring-trail-and-audience-gates; wave anchor #24579 §3). The clause said every by-name door of the gated view answers 403 PERMISSION_DENIED. /history is an authoring-trail door: it asks mayReadAuthoringTrail (studio.access or manage_metadata, packages/rest/src/rest-server.ts) before anything, so a member without either is refused 403 FORBIDDEN first — acceptance[1]'s gate — and PERMISSION_DENIED is reached only by a member the trail admits. The run saw exactly that split. The other doors and clauses are unchanged",
3484-
"ref": "#PENDING-24579R2"
3484+
"ref": "#24632"
34853485
}
34863486
]
34873487
},
@@ -3723,7 +3723,7 @@
37233723
"revision": 2,
37243724
"date": "2026-10-19",
37253725
"change": "acceptance[2] (clause, verify) corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24559, access-security.grant-table-write-contract acceptance[2]; wave anchor #24579 §3): the clause required constraint.rule validity_window_order on the refusal, which is unobservable — a plain rule violation carries field, code and message and no constraint object (packages/objectql/src/validation/rule-validator.ts); only an unevaluable predicate attaches one. The clause now asserts what the rule's verdict carries and what the item's own pin sys-user-permission-set-window-order.test.ts asserts (valid_until · rule_violation, the authored message, no unevaluable reason). The walled leg acceptance[4] is §2's and is unchanged",
3726-
"ref": "#PENDING-24579R2"
3726+
"ref": "#24632"
37273727
}
37283728
]
37293729
},
@@ -3871,7 +3871,7 @@
38713871
"revision": 2,
38723872
"date": "2026-10-19",
38733873
"change": "automated.ref and steps[2] corrected — two checklist-accuracy findings of the 18.0 QA sweep (QA run #24559, access-security.deployment-tables-platform-only; wave anchor #24579 §3). acceptance[0] says the SEVEN tables are pinned, but the named pin, deployment-level-no-tenant-column.test.ts, lists five — the platform-objects ones. sys_flow_dispatch and sys_presence live in service-automation and service-realtime, and each has its own object pin asserting no tenant column and requiredPermissions manage_platform_settings (sys-flow-dispatch.object.test.ts, sys-presence.object.test.ts). automated.ref now names both, so the seven are pinned, and says which tables each file holds. steps[2]'s filter must be URL-encoded. No clause changed",
3874-
"ref": "#PENDING-24579R2"
3874+
"ref": "#24632"
38753875
}
38763876
]
38773877
},
@@ -3954,7 +3954,7 @@
39543954
"revision": 3,
39553955
"date": "2026-10-19",
39563956
"change": "automated.ref gains packages/runtime/src/domains/share-links-messages-audience.test.ts — the out-of-scope §3 note of #24622's round (wave anchor #24579 §3; QA run #24559). That file pins the parity acceptance[3] has asserted since revision 2: /messages hands resolveToken every audience input /resolve hands it, on the plugin mount and the dispatcher twin, so /messages serves exactly the callers /resolve serves. No clause changed",
3957-
"ref": "#PENDING-24579R2"
3957+
"ref": "#24632"
39583958
}
39593959
]
39603960
}

‎docs/qa/platform-checklist/areas/approvals.json‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
"revision": 8,
9696
"date": "2026-10-19",
9797
"change": "acceptance[3].verify corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24542, approvals.per-group-signoff acceptance[3]; wave anchor #24579 §3): it asked for 'the approve branch taken' in the run read, but end nodes log no step and showcase_expense_signoff's approve edge ends at an end node, so no run read can show the branch. The verify now scores the run status transition and the request status, as approvals.quorum-m-of-n already words the same evidence. Clause text unchanged",
98-
"ref": "#PENDING-24579R2"
98+
"ref": "#24632"
9999
}
100100
]
101101
},
@@ -187,7 +187,7 @@
187187
"revision": 5,
188188
"date": "2026-10-19",
189189
"change": "fixtures.requires[1] corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24542, approvals.quorum-m-of-n; wave anchor #24579 §3): in a shared boot an earlier item (approvals.account-app-entry's runtime persona) had bound another member to 'finance', so the committee slate resolved four distinct holders; the run deleted that binding before opening the quorum requests. The fixture now says to clear such bindings first. No clause changed",
190-
"ref": "#PENDING-24579R2"
190+
"ref": "#24632"
191191
}
192192
]
193193
},
@@ -538,7 +538,7 @@
538538
"revision": 6,
539539
"date": "2026-10-19",
540540
"change": "steps[7] and acceptance[1].verify corrected — two checklist-accuracy findings of the 18.0 QA sweep (QA run #24542, approvals.decision-action-matrix; wave anchor #24579 §3). steps[7] reminded 'the admin-submitted invoice request', which a shared boot's approvals.decision-only-via-service has already decided; any admin-submitted pending request serves, and the run used a budget request. acceptance[1] asked for 'the approve/reject edge taken', but end nodes log no step, so the run evidenced the reject by the absence of the approve edge's successor, the needs_exec decision node (examples/app-showcase/src/automation/flows/index.ts). The verify now names that discriminator. Clause text unchanged",
541-
"ref": "#PENDING-24579R2"
541+
"ref": "#24632"
542542
}
543543
]
544544
},
@@ -1019,7 +1019,7 @@
10191019
"revision": 3,
10201020
"date": "2026-10-19",
10211021
"change": "fixtures.requires[2] and acceptance[6].verify corrected — two checklist-accuracy findings of the 18.0 QA sweep (QA run #24542, approvals.account-app-entry; wave anchor #24579 §3). 'Make that invoice one the persona OWNS' did not say which field owns it: showcase_invoice's contributor RLS reads the text field `owner` against current_user.email (invoice_own_rows), so a persona-created invoice is unreadable to its creator until an admin sets `owner`. acceptance[6] did not say where the language switch is: at the console pin 4016370a it is the avatar menu's Preferences › Language row (AppHeader.tsx). No clause text changed",
1022-
"ref": "#PENDING-24579R2"
1022+
"ref": "#24632"
10231023
}
10241024
]
10251025
},
@@ -1343,7 +1343,7 @@
13431343
"revision": 5,
13441344
"date": "2026-10-19",
13451345
"change": "steps[6]–[7] and acceptance[3]–[5] verify corrected — three checklist-accuracy findings of the 18.0 QA sweep (QA run #24542, approvals.approver-resolution-matrix; wave anchor #24579 §3). node_config_json, and so __resolvedFrom, is not on GET /api/v1/approvals/requests/:id — rowFromRequest in approval-service.ts projects no node_config_json — and the run read it through GET /api/v1/data/sys_approval_request/ID as the admin, so the steps and verifies now name that door. output.autoApproved is not surfaced by the automation runs read (no step output, run output {}), so the auto_approve leg proves the approve edge with a marker node, as the run did. acceptance[3]'s quoted warn was a paraphrase of the live line; the verify now matches the two names it carries instead of a sentence. No clause text changed",
1346-
"ref": "#PENDING-24579R2"
1346+
"ref": "#24632"
13471347
}
13481348
]
13491349
},
@@ -1586,7 +1586,7 @@
15861586
"revision": 2,
15871587
"date": "2026-10-19",
15881588
"change": "steps[1] and automated.ref corrected — two checklist-accuracy findings of the 18.0 QA sweep (QA run #24542, approvals.request-page-reply-and-reader-visibility; wave anchor #24579 §3). The comment route's body key is `comment`, not `body`: {body} answers 400 VALIDATION_FAILED 'comment is required' (approval-service.ts comment). automated.ref named request-child-read-gate.integration.test.ts, which covers only the child tables, and omitted request-read-gate.integration.test.ts, the pin of the request object's own generic-door gate that acceptance[2] asserts. That clause's live leg is unreachable on stock showcase (no member reads sys_approval_request), a fixture gap left on #24579 §4. No clause changed",
1589-
"ref": "#PENDING-24579R2"
1589+
"ref": "#24632"
15901590
}
15911591
]
15921592
},

‎docs/qa/platform-checklist/areas/attachments-storage.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,7 @@
709709
"revision": 2,
710710
"date": "2026-10-19",
711711
"change": "automated.ref and acceptance[0].verify corrected — a checklist-accuracy finding of the 18.0 QA sweep (QA run #24560, attachments-storage.orphan-tombstone-reap acceptance[0]; wave anchor #24579 §3): the verify said the dogfood block's cases map one-to-one onto the five variants, but two of them — the byte-delete-failure veto and the field file kept while the gate is closed — are pinned only by packages/services/service-storage/src/attachment-lifecycle.test.ts (createSysFileReapGuard), which automated.ref did not name. The run ran it singly and scored the clause on both files. automated.ref now names it and the verify says which file pins which variant. No clause changed",
712-
"ref": "#PENDING-24579R2"
712+
"ref": "#24632"
713713
}
714714
]
715715
},
@@ -1158,7 +1158,7 @@
11581158
"revision": 3,
11591159
"date": "2026-10-19",
11601160
"change": "acceptance[0].clause narrowed to what its pins prove and fixtures.knownGaps added — the out-of-scope §3 note of #24622's round (wave anchor #24579 §3; QA run #24560): none of the three automated.ref pins drives a chunked door after an organization switch, so the door-level 409 acceptance[3] asserts is unpinned. The only door-level pin of the shared guard (storage-routes.ts requireStartingOrganization) is the presigned commit door's, in error-envelope.conformance.test.ts, and chunk-part-record-concurrency.test.ts pins the store-level miss only. acceptance[0] no longer claims the org-switch guard. The knownGap records the unpinned leg, and points at §2 for its live half, which needs a second organization stock 18.0 refuses. acceptance[1]–[3] (#24622) are unchanged",
1161-
"ref": "#PENDING-24579R2"
1161+
"ref": "#24632"
11621162
}
11631163
]
11641164
}

0 commit comments

Comments
 (0)