Repository navigation
Commit 47f6355
docs(qa): park the 24 partial-coverage gaps of the 17.7 pre-release runs — 2 recipes, 9 pins, 6 re-pointed clauses, 7 recorded knownGaps (#22029)
Fixes #22017
Clause-②: no
## What this does
The four 17.7 pre-release `qa-run` records (#21720, #21721, #21782,
#21784) parked 24 partial-coverage gaps on #22017. Each row now ends in
exactly one disposition on its checklist item: a fixture recipe, a pin,
a re-pointed clause or a recorded knownGap. The work follows
`checklist-author`'s item conventions.
- 26 items across 12 area files are edited (rows 9 and 10 each cover two
items). No row is dropped and no `not-run` leg is added.
- Each edited item bumps `revision` by exactly one. Its new `history`
entry cites its record and #22017 (`ref: "#22017"`).
- Docs only: `docs/qa/platform-checklist/areas/*.json`. There is no
product code, no new test and no `coverage.json` change.
- Every `automated.ref` I added names a test that already exists. I read
each one and checked its quoted test title verbatim, at framework
`1fb274e61c`, or at objectui `0abd4f9f8769` (the `.objectui-sha` pin)
for objectui pins.
Each row's reason was re-checked against `main` and the current objectui
pin, not copied from its record. Five premises turned out false or
stale, and the table says which (rows 1, 4, 14, 21, 22).
## The 24 rows
| # | item · leg (record) | disposition | evidence | rev |
|---|---|---|---|---|
| 1 | `identity-auth.phone-signin-surfaces` A2 / A3 (#21782) | fixture
recipe: boot switch | The premise "no runtime setting" holds for
Settings, but the plugin has a documented boot switch,
`OS_AUTH_PHONE_NUMBER_ENABLED=true`.
`packages/cli/src/commands/serve.ts` maps it to the injected
AuthPlugin's `plugins.phoneNumber`, `os dev` forwards env to its serve
child, and `features.phoneNumber` mirrors it (`auth-manager.ts`
getPublicConfig). Run #21784 used it on `os dev`. | 2 → 3 |
| 2 | `records-forms.crud-roundtrip` A7 readonly half (#21782) | pin |
`metadata-protocol/src/protocol.readonly-insert.test.ts` ("cloneData
forwards the copied row AND the caller overrides whole …") pins the
delegation. `objectql/src/engine-insert-static-readonly-strip.test.ts`
pins the real-engine strip and the defaultValue fallback. | 8 → 9 |
| 3 | `records-forms.import-wizard-encoding-and-hints` A3 (#21782) | pin
(pin-only by design) | The objectui
`importLegacyReferenceGuard.test.tsx` is present at `0abd4f9f8769`. No
live server reaches the legacy path: the console's ObjectStackAdapter
always has `importRecords`. | 4 → 5 |
| 4 | `records-forms.gantt-interactions` A2 / A3 (#21782) | pin |
Premise false: `lockField`, `dependenciesField` and `parentField` are
all `GanttConfigSchema` keys (`packages/spec/src/ui/view.zod.ts`, also
at the run's subject `316be321`), so no clause needed a re-point. The
objectui pins are named per clause: `GanttView.autoscheduledlg`,
`countinterp.i18n`, `scheduling.selfextent` and `GanttView.dnd`. One
residual sub-leg, a direct drag on a locked leaf, is recorded
blocked(fixture). | 2 → 3 |
| 5 | `search.command-palette-navigation` A5 (#21782) | fixture recipe |
The smallest fixture is a scratch-copy showcase nav with two leaves,
`visible: 'false'` and `visible: 'true'`. It is authored from source and
not yet run-proven. The clause named `visibleOn`, which a nav item
refuses as a near-miss (`app.zod.ts` NAV_ITEM_ALIASES), so it now names
`visible` only. | 1 → 2 |
| 6 | `records-forms.grid-personalization` A1 reorder / pin (#21782) |
re-pointed clause | `reorderableColumns` is an `ObjectGridPropsSchema`
prop (`component.zod.ts`) that ObjectGrid defaults false, never a
ListView key. Pin is the author-declared `ListColumnSchema.pinned`. The
persisted columnState holds widths and order only. | 2 → 3 |
| 7 | `records-forms.action-location-matrix` A3 url / api (#21782) |
recorded knownGap + card owed | Revision 7 (#21797) already scores the
legs blocked(fixture) with record_more. The fix is an
`examples/app-showcase` change that no card carries (#21797 breach B-1,
unfiled). It is reported below for the seat to file. | 7 → 8 |
| 8 | `i18n.surface-matrix` A6 confirm half (#21782) | pin | No showcase
action declares a `confirmText` at all. The objectui pins
`page-header-action-i18n.test.tsx` and
`record-quick-actions.actionText-i18n.test.tsx` resolve the confirm body
from `_actions` zh-CN through the real ActionRunner. | 5 → 6 |
| 9a | `platform-core.keyboard-shortcut-surface` A5 (#21782) | recorded
knownGap (environment) | ⌘⇧O / ⌘⇧S live on the AI chat page, which
exists only where an agent catalog serves an agent (Cloud/Enterprise
`service-ai`). CI has no such deployment. The verdict is reclassified
blocked(environment). | 1 → 2 |
| 9b | `ai.console-ai-surface-gating` A2 entitled side (#21782) |
recorded knownGap (environment) | Same environment, and CI lacks it. The
objectui hook pins are named as mechanism-only. | 2 → 3 |
| 10a | `platform-core.builtin-apps-nav-render` catalog (#21782) |
recorded knownGap (environment) | The leg needs a boot that reaches
`DEFAULT_CLOUD_URL` (`packages/cloud-connection/src/cloud-url.ts`) or a
reachable `OS_CLOUD_URL`. No CI job drives it. | 4 → 5 |
| 10b | `platform-core.marketplace-console-honesty` boot A catalog
(#21782) | recorded knownGap (environment) | Same environment as 10a. |
2 → 3 |
| 11 | `access-security.rls-both-sides` A6 (#21720) | recorded knownGap
| The D11 spot-check needs the maintainer's private write-up and its
private remediation card (#7463 ruling), which no public record or CI
carries. The skipped-object half stays scoreable. The text is
non-disclosing. | 5 → 6 |
| 12 | `access-security.write-path-guards` N2 (#21720) | pin |
`objectql/src/engine-insert-static-readonly-strip.test.ts` ("isSystem
seeds the readonly column …") covers INSERT, and
`engine-readonly-strip-caller-values.test.ts` ("an isSystem caller is
untouched by any of this") covers UPDATE. Both use a real engine. | 3 →
4 |
| 13 | `api-backend.declarative-endpoint-execution` A3 (#21720) |
re-pointed clause | No public door serves a script / proxy endpoint.
`api` is code-only (#5488, `allowRuntimeCreate` false), and the stack
schema refuses both types (`endpoint-publish-gate.ts`
validateApiEndpointDeclarations). A3 now asserts the authoring refusal
(oracle build). The runtime 501 is pinned by `endpoint-executor.test.ts`
and `apis-publish-gates.test.ts` gate (a). | 1 → 2 |
| 14 | `records-forms.predicate-relationship-traversal` A4 (#21720) |
re-pointed clause | The knownGap was false: `showcase_member_default`
grants `showcase_account` read to every member
(`examples/app-showcase/src/security/permission-sets.ts`), and grants
are additive, so the persona cannot exist on stock. A4 is scored from
`objectql/src/engine-predicate-relationship.test.ts` (related read under
SYSTEM authority; accept / refuse on the real write path), or live on
the scratch-object substitute #21720 measured. | 1 → 2 |
| 15 | `identity-auth.admin-lifecycle-operations` A4–A6 (#21784) |
re-pointed clause | set-role is ruled (#9968, ruled B);
revoke-user-sessions and remove-user are ruled (#9969, not_planned).
A4–A6 now assert the ruled 403s with their vendor codes and a no-effect
read, pinned by `admin-platform-admin-standing.dogfood.test.ts`. The
cascade exemption is scored from plugin-security's "[#3023]" test. Step
2 (list-users) follows the same ruling. | 6 → 7 |
| 16 | `studio-authoring.expression-editors` A8 (#21784) | pin
(environment named) | The objectui `celAuthoring.test.ts` "graceful
degradation" is present at `0abd4f9f8769`. The leg is pin-only by clause
design. The knownGap names the environment, an objectui checkout at the
pin. | 2 → 3 |
| 17 | `studio-authoring.metadata-diagnostics-sweep` A7 (#21784) |
recorded knownGap (environment) | The leg needs a store already holding
a stale row. A stock environment never holds one, by design, and no CI
job builds one. The producer pin
(`metadata-diagnostics.union-issues.test.ts`) is named as
mechanism-only. | 1 → 2 |
| 18 | `integration-system.datasource-credential-refusal-matrix` A2 / A7
(#21784) | recorded knownGap (already, #21932 rev 3) | This was already
parked today by #21932. This PR adds whether CI has the database:
postgres and mysql exist only in the Temporal Conformance job, which
runs no checklist item, and there is no mongo. It also adds the record
citation. | 3 → 4 |
| 19 | `approvals.decision-action-matrix` A10 (#21784) | pin |
`plugin-approvals/src/approval-service.test.ts` describe "org-filtered
read-back refuses loudly (#12769)". The api-trigger candidate is
refuted, since the run found it org-stamped. The wire-envelope half
stays unobserved on stock. | 3 → 4 |
| 20 | `identity-auth.auth-method-matrix` A1 SSO / device + N3 (#21784)
| recorded knownGap | `serve.ts` injects AuthPlugin with four env-mapped
plugins and no `deviceAuthorization` or `oidcProviders`. SSO has the
`OS_SSO_ENABLED` switch but needs a registered provider behind a
reachable IdP. N3's dependency, objectui#4179, closed not_planned on
2026-09-24. | 5 → 6 |
| 21 | `integration-system.external-schema-browser-ui` A7 (#21784) |
re-pointed clause | Stale expected-fail. At objectui `0abd4f9f8769`,
objectui#11628 (PR #11640) maps the server's `SERVICE_UNAVAILABLE` 503
envelope to `ExternalServiceUnavailableError`, pinned by `api.test.ts`.
The run's console `2e818d0b51ec` predates the fix. A7 is now a positive
assertion scored from the pin; the live render still needs an unwired
boot. | 1 → 2 |
| 22 | `records-forms.encrypted-field-behavior` A4 (#21784) | pin
(pin-only of necessity) | `objectql/src/secret-fields.test.ts`
("fail-closed: writing a secret field with no CryptoProvider throws").
The knownGap's "production boot without OS_SECRET_KEY" path was wrong:
that boot refuses to start (`serve.ts` rethrows). | 1 → 2 |
| 23 | `cli.flag-command-error-ux` A4 (#21721) | re-pointed clause | 33
variants: 20 command files and 12 topic directories in
`packages/cli/src/commands`, plus generate's `static aliases = ['g']`.
`secret`, `storage` and `g` are added, and A4's count is now derived per
run. | 2 → 3 |
| 24 | `cli.datasource-introspect-codegen` A1 narrowing half (#21721) |
pin | `rest/src/remote-tables-twin.equivalence.test.ts` covers
`?schema=` narrowing and the empty set on the federation route the CLI
calls. `external-datasource-service.test.ts` adds "filters by requested
schema", and `envelope-unwrap.test.ts` adds the "no remote tables"
print. SQLite tables carry no schema, so `listRemoteTables` never
filters them. | 3 → 4 |
Tally: 2 fixture recipes · 9 pins · 6 re-pointed clauses · 7 recorded
knownGaps (counted by row; rows 9 and 10 cover two items each).
## For the seat (not filed here)
- **Card owed (row 7):** "showcase: host record_header / record_more /
record_related surfaces for showcase_task". It needs a showcase_task
page that composes a record header, and a parent record page that
renders the synthesized Tasks related list. Evidence:
`examples/app-showcase/src/ui/pages/task-detail.page.ts` is `kind:
'full'` with no record header node, and `project-detail.page.ts`
replaces the related strip with `record:line_items`. #21797 named it
breach B-1 and left it unfiled. `records-forms.action-location-matrix`
A1's three variants and A3's url / api legs park on it.
## Acceptance notes
- **Two recipes are not run-proven.** Row 1's boot switch was booted by
run #21784 for another item. Row 5's scratch-copy nav is authored from
source only. Both items say so, and neither claims coverage.
- **Residuals named inside a disposition:**
- row 4: a direct drag on a locked leaf;
- row 19: the wire envelope;
- row 21: the live render on an unwired boot;
- row 24: the CLI's `--schema` to `?schema=` forwarding.
Each is written into its item as blocked or unpinned, never as a pass.
- **Not fixed here (same items, outside the 24 rows):**
- `external-schema-browser-ui` requires text still says "5 columns
each"; the runs measured `columnCount` 7. #21797 listed it as unparked.
- RUNNER.md's standing fact counts "23 items" whose `automated.ref` is
objectui-only; the ledger has 28 at base, and this PR adds two more
(rows 8 and 21), for 30.
Carrier for both: none.
- **Framework pins were read, not run locally.** They live in packages
this PR does not touch and run in CI's required suites on `main`.
objectui pins were checked at the pinned revision by `git show`.
## Verification
Gate list derived by `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` (no paths, merge-base) at head
`25b451177`: 13 commands, all `exit 0`, and `--ran` reconciled "13
derived, 13 run, 0 NOT-MEASURED (a DERIVED zero)".
- `check:platform-checklist`: OK — 276 items. Symbol anchors are 709/719
resolved (base 697/707, +12, all resolving), and 0 line citations
survive.
- `check:doc-formula-expressions` first exited 3 (prerequisite not met:
lint/formula not built). That run was NOT MEASURED. After `turbo run
build --filter=@objectstack/formula --filter=@objectstack/lint`, it
exited 0.
- The other 11: `check-ci-filter-parity`, `check-closing-keyword-parity`
(and `--self-test`), `check-comment-mask-corpus`,
`cross-package-test-inputs`, `doc-authoring`, `driver-memory-census`,
`gitlink-declared`, `nul-bytes`, `refd-timer-probe` and
`watch-hint-literal` all exited 0.
- A semantic diff against base: exactly the 26 intended items changed,
each by revision +1 with one appended history entry citing its record.
No other item and no top-level key moved.
Changeset: none. `docs/qa/**` ships in no package's `files[]`, so this
is `skip-changeset`.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 289ff6d commit 47f6355
12 files changed
Lines changed: 271 additions & 115 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
24 | 27 | | |
25 | 28 | | |
26 | 29 | | |
| |||
115 | 118 | | |
116 | 119 | | |
117 | 120 | | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
118 | 127 | | |
119 | 128 | | |
120 | 129 | | |
| |||
123 | 132 | | |
124 | 133 | | |
125 | 134 | | |
126 | | - | |
| 135 | + | |
127 | 136 | | |
128 | 137 | | |
129 | 138 | | |
| |||
193 | 202 | | |
194 | 203 | | |
195 | 204 | | |
196 | | - | |
| 205 | + | |
197 | 206 | | |
198 | 207 | | |
199 | 208 | | |
200 | | - | |
| 209 | + | |
201 | 210 | | |
202 | 211 | | |
203 | 212 | | |
| |||
228 | 237 | | |
229 | 238 | | |
230 | 239 | | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
231 | 246 | | |
232 | 247 | | |
233 | 248 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
596 | 596 | | |
597 | 597 | | |
598 | 598 | | |
599 | | - | |
| 599 | + | |
600 | 600 | | |
601 | 601 | | |
602 | 602 | | |
| |||
608 | 608 | | |
609 | 609 | | |
610 | 610 | | |
611 | | - | |
| 611 | + | |
612 | 612 | | |
613 | 613 | | |
614 | 614 | | |
| |||
632 | 632 | | |
633 | 633 | | |
634 | 634 | | |
635 | | - | |
| 635 | + | |
636 | 636 | | |
637 | 637 | | |
638 | 638 | | |
| |||
681 | 681 | | |
682 | 682 | | |
683 | 683 | | |
684 | | - | |
| 684 | + | |
| 685 | + | |
685 | 686 | | |
686 | 687 | | |
687 | 688 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
873 | 873 | | |
874 | 874 | | |
875 | 875 | | |
876 | | - | |
| 876 | + | |
877 | 877 | | |
878 | 878 | | |
879 | 879 | | |
| |||
891 | 891 | | |
892 | 892 | | |
893 | 893 | | |
894 | | - | |
| 894 | + | |
895 | 895 | | |
896 | 896 | | |
897 | 897 | | |
898 | 898 | | |
899 | 899 | | |
900 | | - | |
| 900 | + | |
901 | 901 | | |
902 | 902 | | |
903 | 903 | | |
| |||
914 | 914 | | |
915 | 915 | | |
916 | 916 | | |
917 | | - | |
918 | | - | |
919 | | - | |
920 | | - | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
921 | 921 | | |
922 | 922 | | |
923 | 923 | | |
| |||
931 | 931 | | |
932 | 932 | | |
933 | 933 | | |
934 | | - | |
| 934 | + | |
935 | 935 | | |
936 | 936 | | |
937 | 937 | | |
938 | 938 | | |
939 | 939 | | |
940 | 940 | | |
941 | 941 | | |
942 | | - | |
| 942 | + | |
| 943 | + | |
943 | 944 | | |
944 | 945 | | |
945 | 946 | | |
946 | 947 | | |
947 | 948 | | |
948 | 949 | | |
949 | 950 | | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
950 | 957 | | |
951 | 958 | | |
952 | 959 | | |
| |||
0 commit comments