Skip to content

Commit 57d2c81

Browse files
committed
docs(qa): correct the v18 items the first live run disproved
Driving the new items on a fresh showcase boot showed four authoring errors in them: a view name is dotted OBJECT.NAME, the /meta version token is served on the ?state=draft read only, stock self-registration is closed so the member is created by the admin (and lands held), and the dispatcher /ui domain is not mounted over HonoServer. The grant window clause now asserts the rule's own violation, not any 400. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016NNWeTTi2eHhhrgDq9sJF8
1 parent 46c6ca0 commit 57d2c81

10 files changed

Lines changed: 50 additions & 39 deletions

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

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3117,7 +3117,7 @@
31173117
},
31183118
{
31193119
"id": "access-security.anonymous-floor-v18-doors",
3120-
"title": "The anonymous floor answers 401 FIRST on the doors v18 added to it — /notifications (was 501), non-POST /keys (was 405), share-link management (was 501), every /ui face, /openapi.json and /docs, every /i18n face and the settings family — while the token faces and the public-form submit stay anonymous and the submit echoes only {id}",
3120+
"title": "The anonymous floor answers 401 FIRST on the doors v18 added to it — /notifications (was 501), non-POST /keys (was 405), share-link management (was 501), /openapi.json and /docs, every /i18n face and the settings family — while the token faces and the public-form submit stay anonymous and the submit echoes only {id}",
31213121
"since": "v18",
31223122
"status": "active",
31233123
"revision": 1,
@@ -3132,10 +3132,14 @@
31323132
"requires": [
31333133
"a fresh boot of the showcase: `pnpm dev -- --fresh -p PORT --seed-admin` (ephemeral DB; the seeded admin is printed)",
31343134
"the showcase's published public form slug (GET /api/v1/meta/form as admin lists it)"
3135+
],
3136+
"knownGaps": [
3137+
"the dispatcher `/ui` domain (also floored by 23225) is NOT mounted over HonoServer on a stock `os dev` / `os serve` — GET /api/v1/ui/... answers 404 ENDPOINT_NOT_FOUND to the admin too — so it is not driven here; it is reachable only on a dispatcher-only (hosted) kernel and is pinned by the dogfood sweep",
3138+
"the dispatcher mounts only POST /keys on HonoServer (packages/runtime/src/dispatcher-plugin.ts), so a non-POST /keys never reaches the domain's floor on a stock boot: the HonoServer fallback answers it 405 METHOD_NOT_ALLOWED (packages/plugins/plugin-hono-server/src/adapter.ts unmatchedResponse) — run 2026-10-16 measured exactly that; the clause stays as the 23225 contract states it, so a 405 there is a FAIL, not a re-point"
31353139
]
31363140
},
31373141
"steps": [
3138-
"with NO credentials call: GET /api/v1/notifications, GET /api/v1/keys, GET /api/v1/share-links, GET /api/v1/ui/view/showcase_task, GET /api/v1/openapi.json, GET /api/v1/docs, GET /api/v1/i18n/locales, GET /api/settings/branding",
3142+
"with NO credentials call: GET /api/v1/notifications, GET /api/v1/keys, GET /api/v1/share-links, GET /api/v1/openapi.json, GET /api/v1/docs, GET /api/v1/i18n/locales, GET /api/settings/branding",
31393143
"with no credentials call a token face: GET /api/v1/share-links/BOGUS/resolve",
31403144
"with no credentials POST /api/v1/forms/SLUG/submit with a valid body",
31413145
"repeat two of the 401 calls as admin to prove the door itself serves"
@@ -3274,19 +3278,19 @@
32743278
"surface": "api",
32753279
"personas": [
32763280
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
3277-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
3281+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
32783282
],
32793283
"fixtures": {
32803284
"app": "showcase",
32813285
"requires": [
32823286
"a fresh boot of the showcase: `pnpm dev -- --fresh -p PORT --seed-admin` (ephemeral DB; the seeded admin is printed)",
3283-
"a scratch list view (PUT /api/v1/meta/view/qa_gated_view — view is overlay-allowed on stock showcase) with requiredPermissions naming a capability the member lacks",
3287+
"a scratch list view (PUT /api/v1/meta/view/showcase_task.qa_gated_view — view is overlay-allowed on stock showcase; a view name is dotted OBJECT.NAME) with requiredPermissions naming a capability the member lacks",
32843288
"a member granted setup.access but not studio.access / manage_metadata (a scratch permission set assigned through sys_user_permission_set)"
32853289
]
32863290
},
32873291
"steps": [
32883292
"as the setup.access-only member: GET /api/v1/meta/object/showcase_task/history, /audit, /diff; GET /api/v1/packages/com.example.showcase/commits",
3289-
"as a member without the capability: GET /api/v1/meta/view (list) and GET /api/v1/meta/view/qa_gated_view, plus /published, /layers, ?state=draft, /history",
3293+
"as a member without the capability: GET /api/v1/meta/view (list) and GET /api/v1/meta/view/showcase_task.qa_gated_view, plus /published, /layers, ?state=draft, /history",
32903294
"as admin: the same reads (control); then delete the scratch view"
32913295
],
32923296
"acceptance": [
@@ -3344,7 +3348,7 @@
33443348
"surface": "api",
33453349
"personas": [
33463350
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
3347-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)",
3351+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)",
33483352
"anonymous caller (no cookie, no bearer, no x-api-key)"
33493353
],
33503354
"fixtures": {
@@ -3498,7 +3502,7 @@
34983502
"surface": "api",
34993503
"personas": [
35003504
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
3501-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
3505+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
35023506
],
35033507
"fixtures": {
35043508
"app": "showcase",
@@ -3522,10 +3526,16 @@
35223526
"evidence": "the vitest summary line per pin file, with the package name and the subject sha"
35233527
},
35243528
{
3525-
"clause": "permission_set_id → 400 INVALID_FIELD; a second identical grant → 409 UNIQUE_VIOLATION; valid_until <= valid_from → 400 VALIDATION_FAILED at valid_until (rule validity_window_order)",
3529+
"clause": "permission_set_id → 400 INVALID_FIELD; a second identical grant → 409 UNIQUE_VIOLATION",
35263530
"oracle": "api",
35273531
"verify": "status + code + located field per arm",
3528-
"evidence": "three refusal bodies"
3532+
"evidence": "two refusal bodies"
3533+
},
3534+
{
3535+
"clause": "an INSERT with valid_until <= valid_from is refused as the rule's VIOLATION: 400 VALIDATION_FAILED at valid_until with constraint.rule validity_window_order, constraint.reason NOT `unevaluable`, and the rule's authored message (\"Valid Until must be later than Valid From …\") — an unevaluable-predicate refusal is a FAIL even though it also answers 400",
3536+
"oracle": "api",
3537+
"verify": "fields[0].constraint + message on the inverted-window insert; a valid window inserts 201 (control)",
3538+
"evidence": "the refusal body + the control"
35293539
},
35303540
{
35313541
"clause": "a non-system insert naming someone else as granted_by stores the CALLER",
@@ -3568,7 +3578,7 @@
35683578
"surface": "api",
35693579
"personas": [
35703580
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
3571-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
3581+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
35723582
],
35733583
"fixtures": {
35743584
"app": "showcase",
@@ -3645,7 +3655,7 @@
36453655
"surface": "api",
36463656
"personas": [
36473657
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
3648-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
3658+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
36493659
],
36503660
"fixtures": {
36513661
"app": "showcase",

‎docs/qa/platform-checklist/areas/api-backend.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2515,7 +2515,7 @@
25152515
"surface": "api",
25162516
"personas": [
25172517
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2518-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2518+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
25192519
],
25202520
"fixtures": {
25212521
"app": "showcase",
@@ -2594,7 +2594,7 @@
25942594
"surface": "api",
25952595
"personas": [
25962596
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2597-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2597+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
25982598
],
25992599
"fixtures": {
26002600
"app": "showcase",
@@ -2678,7 +2678,7 @@
26782678
"surface": "api",
26792679
"personas": [
26802680
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2681-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2681+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
26822682
],
26832683
"fixtures": {
26842684
"app": "showcase",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@
14581458
"surface": "mixed",
14591459
"personas": [
14601460
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
1461-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
1461+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
14621462
],
14631463
"fixtures": {
14641464
"app": "showcase",
@@ -1542,7 +1542,7 @@
15421542
"surface": "api",
15431543
"personas": [
15441544
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
1545-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
1545+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
15461546
],
15471547
"fixtures": {
15481548
"app": "showcase",

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,7 @@
902902
"surface": "api",
903903
"personas": [
904904
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
905-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)",
905+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)",
906906
"anonymous caller (no cookie, no bearer, no x-api-key)"
907907
],
908908
"fixtures": {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2020,7 +2020,7 @@
20202020
"surface": "api",
20212021
"personas": [
20222022
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2023-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2023+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
20242024
],
20252025
"fixtures": {
20262026
"app": "showcase",

‎docs/qa/platform-checklist/areas/identity-auth.json‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2127,13 +2127,13 @@
21272127
"surface": "api",
21282128
"personas": [
21292129
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2130-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2130+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
21312131
],
21322132
"fixtures": {
21332133
"app": "showcase",
21342134
"requires": [
21352135
"a fresh boot of the showcase: `pnpm dev -- --fresh -p PORT --seed-admin` (ephemeral DB; the seeded admin is printed)",
2136-
"a member whose session the policy holds: force a reset on the member (the admin set-password / force-reset action) or enable a password-expiry / MFA-required policy in auth settings, then sign the member in",
2136+
"a member whose session the policy holds — the cheapest: create the member with POST /api/v1/auth/admin/create-user, which lands mustChangePassword:true, and sign it in BEFORE it changes its password (held with PASSWORD_RESET_REQUIRED); an expiry / MFA-required policy in auth settings holds it with the other two codes",
21372137
"an API key minted by the member before the hold (POST /api/v1/keys)"
21382138
]
21392139
},
@@ -2344,7 +2344,7 @@
23442344
"surface": "api",
23452345
"personas": [
23462346
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2347-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2347+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
23482348
],
23492349
"fixtures": {
23502350
"app": "showcase",
@@ -2353,8 +2353,8 @@
23532353
]
23542354
},
23552355
"steps": [
2356-
"before signing anyone up (a boot WITHOUT --seed-admin on a fresh DB), confirm via the boot log / scratch DB that sys_organization holds the slug `default` row",
2357-
"sign up the first user, then a second; GET /api/v1/auth/get-session for each",
2356+
"on a fresh DB, confirm the slug `default` sys_organization row exists before the first user: read the boot log ordering (the Default Organization is ensured before --seed-admin signs the admin up) or boot WITHOUT --seed-admin and read the scratch DB",
2357+
"let --seed-admin create the first user, then create a second with POST /api/v1/auth/admin/create-user (self-registration is closed on the stock showcase); GET /api/v1/auth/get-session for each",
23582358
"as admin GET /api/v1/data/sys_member?filter organization = default",
23592359
"as admin GET /api/v1/data/sys_business_unit and read organization_id on the seeded rows"
23602360
],
@@ -2372,7 +2372,7 @@
23722372
"evidence": "the row (id, slug) and the timestamp ordering against the first sign-up"
23732373
},
23742374
{
2375-
"clause": "first sign-up is owner, the second is member, and both sessions carry the Default Organization as activeOrganizationId",
2375+
"clause": "the first user is owner, the second is member, and both sessions carry the Default Organization as activeOrganizationId",
23762376
"oracle": "api",
23772377
"verify": "sys_member roles + get-session payloads",
23782378
"evidence": "the two member rows and two session payloads"

‎docs/qa/platform-checklist/areas/integration-system.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,7 +1925,7 @@
19251925
"surface": "mixed",
19261926
"personas": [
19271927
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
1928-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
1928+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
19291929
],
19301930
"fixtures": {
19311931
"app": "showcase",
@@ -1997,7 +1997,7 @@
19971997
"surface": "api",
19981998
"personas": [
19991999
"seeded admin (admin@objectos.ai / admin123) — the Default Organization owner and platform admin on a fresh boot",
2000-
"org member (a second sign-up on the same boot — joins the Default Organization as `member`, not platform admin)"
2000+
"org member — created by the admin with POST /api/v1/auth/admin/create-user (stock showcase self-registration is closed: audience posture invite_only answers sign-up 403 SELF_REGISTRATION_CLOSED); joins the Default Organization as `member`, not platform admin, and lands mustChangePassword:true, i.e. a HELD session until it changes its password (POST /api/v1/auth/change-password)"
20012001
],
20022002
"fixtures": {
20032003
"app": "showcase",

0 commit comments

Comments
 (0)