WIP: fix(auth): a refused person reads what happened and what to do #60
Draft
james.maes
wants to merge 1 commits from
fix/plain-permission-messages into main
pull from: fix/plain-permission-messages
merge into: QRun-IO:main
QRun-IO:main
QRun-IO:release/2.0
QRun-IO:fix/2.0-uninstall-survives-held-shortcut-20261111
QRun-IO:feat/2.0-shell-tree-models-20261111
QRun-IO:test/2.0-ui-identifier-baseline-20261111
QRun-IO:feat/2.0-wizard-server-step-20261111
QRun-IO:feat/2.0-companion-management-client-20261111
QRun-IO:docs/2.0-wizard-decisions-and-audit-20261111
QRun-IO:feat/2.0-companion-sign-in-dispatcher-20261110
QRun-IO:refactor/2.0-native-seams-update-service-pipe-20261110
QRun-IO:fix/2.0-contract-and-redaction-findings-20261110
QRun-IO:fix/2.0-one-queue-lookup-20261110
QRun-IO:feat/2.0-journal-schema-version-20261110
QRun-IO:fix/2.0-load-balancer-affinity-20261110
QRun-IO:feat/2.0-certificate-exception-per-origin-20261110
QRun-IO:fix/2.0-cli-piped-input-bom-20261110
QRun-IO:fix/2.0-claim-unpaired-surrogate-20261110
QRun-IO:fix/2.0-worker-recheck-and-in-hand-20261110
QRun-IO:docs/2.0-settlements-and-audit-status-20261110
QRun-IO:refactor/2.0-native-seams-printing-20261110
QRun-IO:refactor/2.0-native-seams-startup-20261110
QRun-IO:fix/2.0-channel-cancel-race-20261110
QRun-IO:test/2.0-runtime-harness-20261110
QRun-IO:refactor/2.0-runtime-seam-20261110
QRun-IO:feat/2.0-management-contract-20261110
QRun-IO:docs/2.0-station-identity-20261110
QRun-IO:refactor/2.0-remove-unreachable-transport-20261110
QRun-IO:feat/2.0-presentation-assembly-on-release-20261110
QRun-IO:fix/load-balancer-affinity-20261110
QRun-IO:fix/2.0-store-open-race-20261110
QRun-IO:docs/2.0-build-decisions-20261110
QRun-IO:docs/2.0-audit-status-20261110
QRun-IO:refactor/2.0-core-hardening-on-release-20261110
QRun-IO:refactor/2.0-cli-cleanup-on-release-20261110
QRun-IO:build/2.0-version-on-release-20261110
QRun-IO:refactor/2.0-legacy-polling-on-release-20261110
QRun-IO:ci/shared-windows
QRun-IO:docs/2.0-design-records-20261110
QRun-IO:fix/enrollment-keeps-pairing-1.2.x-20261110
QRun-IO:fix/enrollment-keeps-pairing-20261110
QRun-IO:ci/msi-fallback-on-shared-windows
QRun-IO:ci/msi-validation-fallback-20261110
QRun-IO:build/2.0-coverage-gate-20261110
QRun-IO:release/1.2.2
QRun-IO:fix/signout-ends-provider-session
QRun-IO:docs/forge-handoff-qbit-112-20261106
QRun-IO:docs/changelog-1.1.1-heading
QRun-IO:docs/forge-handoff-qbit-111-20261106
QRun-IO:docs/release-1.2.1-20261106
QRun-IO:fix/release-edition-splat-20261105
QRun-IO:feat/client-editions-20261105
QRun-IO:fix/native-login-required-nonce
QRun-IO:fix/browser-callback-inbox-20261105
QRun-IO:feat/sign-in-diagnostics-20261105
QRun-IO:docs/printing-release-closeout-20261104
QRun-IO:qualification/windows-shared-original-20261103
QRun-IO:ci/windows-original-packaging-entrypoint-20261103
QRun-IO:qualification/windows6218-printing-20261103
QRun-IO:fix/signing-tool-install-20261102
QRun-IO:release/printing-cohort-20261101
QRun-IO:dependabot/github_actions/actions-1c177510ea
QRun-IO:chore/csharp-documentation-20261101
QRun-IO:chore/script-quality-gates-20261101
QRun-IO:feat/small-label-tests-20261101
QRun-IO:archive/qrun-github-cutover-20261101/e870119e2b83/chore/script-quality-gates-20261101
QRun-IO:archive/qrun-github-cutover-20261101/cc400995f063/dependabot/github_actions/actions-1c177510ea
QRun-IO:migration/cutoff-cc400995f063-dac238
QRun-IO:archive/qrun-github-cutover-20261101/0336d5f888ac/main
QRun-IO:migration/cutoff-0336d5f888ac-0d6e40
QRun-IO:archive/qrun-github-cutover-20261101/3c894733d18c/main
QRun-IO:fix/windows-source-headers-20261101
QRun-IO:archive/qrun-github-cutover-20261101/e5846df71584/main
QRun-IO:archive/qrun-github-cutover-20261101/5d8a542eed61/dependabot/github_actions/actions-df2b3b8582
QRun-IO:docs/installed-native-020-20261031
QRun-IO:dependabot/github_actions/actions-df2b3b8582
QRun-IO:dependabot/github_actions/actions-9120074c41
No Reviewers
Labels
Clear labels
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
secuurity
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Pull requests that update GitHub Actions code
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
This will not be worked on
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: QRun-IO/qqq-print-agent#60
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Draft: wording only, for review. Not for release this week; no version, release branch or installer file is touched.
What
A person the server refuses reads what happened and what to do, without a framework's name.
403on a request that rests on the account alone: the identity read after sign-in (sessionwithout print station proof),operator/printers,admin/....403ondevices/enroll.403on a request that carries this print station's proof:device/...,device/bind,sessionwith proof.401, or no session.A client edition that names its server (
serverNamein the edition file) has that name in the sentences: "You are signed in to Acme Cloud, but ...", "Sign in to Acme Cloud to continue." The generic build, and an edition that keeps the default, name none. The client reads no branding or product name from the server, so the edition is the only name it knows.Why
A person refused by the print client read "The current QQQ user is not permitted ..." as a message from a different system and did not know what to ask for.
The server answers every refusal with the same
403and the client does not read its body (unchanged), so the client cannot tell the reasons apart from the answer. It can tell them apart from what it asked, which is what the three sentences follow. The sentences name no role: which grant a print station needs is the server's rule and may change.How it was tested
./build/Verify.ps1 -ProtocolFixtures <fixtures of the protocol revision pinned in ci.yml, ac835f8>: locked restore, solution build with-warnaserror(0 warnings, 0 errors),Qqq.PrintAgent.Core.Tests204 passed,Qqq.PrintAgent.Cli.Tests377 passed. No signing, packaging or installer step was run.Qqq.PrintAgent.Cli.Teststimeouts (AgentRuntimeQueuedJobsTests.QueuedJobAppearsAndCanBeCanceledBeforeAnyLocalReceipt,AgentControlConcurrencyTests.RemoteDisconnectAndReconnectDoNotInterruptBlockedPrintOrControlPolling); both pass on an idle machine and neither touches the changed code.QqqSessionAuthenticationTests: the sentence for each kind of refused request, with the server's body ignored; the refused identity read with and without print station proof; the edition's name used only when there is one; the existing 401/403 test now also asserts the two sentences.Not changed here, and still naming the framework in text a person can reach: "The QQQ request did not succeed.", "QQQ authorization is required to restore the realtime connection.", "The printer is not exposed to QQQ on this computer.", "The job was not found or this QQQ server needs the printing operator-actions update.", the log lines, and the generic build's own name. They are not permission messages; say if they should follow.
Checklist
main)🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.