Repository navigation
Description
Run record per docs/qa/platform-checklist/RUNNER.md 〈Run records — the GitHub issue is the report〉: a protocol carrier, not work. Filed by the domain:devx seat 2 PM (session_01JAhu8u8QfBvRjVZDox7CP9, seat post #20163) on behalf of the runner, the cloud dev session session_01RUy93pSQMTtKhN5paYkN1C: the runner's write budget did not include issue-create. Item: studio-authoring.doc-on-app-menu revision 1, authored by PR #20973 (card #20939). The text below is the runner's record, copied from that PR's body.
Env fingerprint
- Backend: this repository's
mainshowcase atf6ccca4a(the branch head adds docs only), not a published@objectstack/cli. Booted asobjectstack dev --ui --seed-admin -p 38741withOS_PORT=38741on a fresh file DB. - Fork window. Pin
.objectui-shaisdb11afd4967c(unchanged onmainatd7b98176). The console driven was objectuid6a1a80d5d054015097a5dd5dda83737e4b99858, the landing commit of objectui PR 11258, which carries PR 11241 (02fe8ca8a0). Both are ancestors of it; I checked withmerge-base --is-ancestorexit 0. - The console was built by
scripts/build-console.shwithOBJECTUI_ROOTat that revision and.objectui-shaset to it in the working tree only. It was restored afterwards and is not in this diff. - At the pin, the console source contains no "You do not have access to this documentation" heading and no renderer doc-target check. A run against the vendored pin would fail for a reason that is not this item's.
- The console build needed
npm_config_engine_strict=false. objectui'sjsdomtest dependency pins Node^22.22.2and this container runs22.22.0;jsdomis not in the console bundle.
Scope. Selector studio-authoring.doc-on-app-menu, 1 runnable item, revision 1. There are three personas, each signed in through the form in its own browser context. Each identity was proven with GET /auth/get-session before its cells.
Fixtures.
- The stock corpus was verified first: one book,
showcase_manual(audiencepublic), 9 docs, and nodocnav entry on any app. Everything below was authored at runtime and torn down. Afterwards the corpus reads back as that baseline. - Writable base
com.qa.docs, created withPOST /packages. - Books, all in
com.qa.docs:qa_gated_book(audience permission setshowcase_auditor, claimsqa_gated_page);qa_open_book(org, claimsqa_open_page);qa_empty_book(claims nothing). The labels sortA Empty/B Gated/C Open, so "the first book by label" would be the wrong book for both pages. - App
qa_docs_app, with seven doc entries covering all three shapes over both corpora. - Members: a reader holding
showcase_auditor(through asys_user_permission_setrow) and an outsider. qa_gated_pagewas authored in the Studio doc editor:PUT …?mode=draft&package=com.qa.docs200, thenPOST …/publish200.
| # | clause | oracle | verdict | evidence (text) |
|---|---|---|---|---|
| 0 | /meta/app carries no unreadable doc entry; the reader receives them |
api | pass | Reader: all 6 gated and open entries. Outsider: the 3 open entries. Admin (holds no app-declared set): the same 3. nav_empty_book (claims no page) is pruned for all three. Same-name reads: reader 200 on /meta/doc/qa_gated_page and /meta/book/qa_gated_book/tree; outsider 403 PERMISSION_DENIED on both. |
| 1 | UI mirror | dom (after screenshot) | pass | Each shell was screenshotted settled. The rendered doc entries for reader 6, outsider 3 and admin 3 match /meta/app. Both diff directions are empty for all three personas. |
| 2 | page opens in its claiming book; book opens on its first readable page with a pruned sidebar | dom | pass | {doc: qa_open_page} lands on /docs/qa_open_book/qa_open_page, the claiming book, not A/B by label. {doc: qa_gated_page} lands on /docs/qa_gated_book/qa_gated_page. Both {book} entries and both {book, doc} entries land on that page. Sidebars: the outsider on the open book sees only qa_open_page; the reader sees qa_open_page, qa_gated_page. Every sidebar entry is in that member's tree; none is wider. |
| 3 | outsider refused on every direct route; the control reads not found | screenshot | pass | On all 6 gated routes (/docs/… and /apps/qa_docs_app/docs/… × page / book / book+page): a lock icon, the heading "You do not have access to this documentation", and the server's reason "This documentation is limited to holders of a permission set you do not have". The server answers 403 for the same names. Control qa_nothing_here on both route roots shows "Documentation not found"; GET /meta/doc/qa_nothing_here answers 404. There was no blank region and no "Failed to load documentation". |
Derived item verdict: pass. No fail, so there is no reproduction rule to carry. The machine record, in RUNNER shape, is docs/qa/platform-checklist/runs/2026-09-30-doc-on-app-menu.json in the runner's workspace. The runs/ directory is git-ignored by contract, so it is not in this diff.
Extraction. No fail, so there are no product defects to extract. The fixture recipe measured by the run went into the item's fixtures.knownGaps. Two observations were not filed: they are recorded in PR #20973's Acceptance notes.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 6, 2026
Close-out: closed
completed. Every clause passed, so there is no fail or partial to disposeTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-06T15:48Z. The maintainer, in the triage seat's chat, approved clearing the openqa-runrecords' close-out debt: 「同意,动手」.Generated by Claude Code