README: people sign in, programs use keys - #263
Merged
Merged
Conversation
webdevtodayjason
force-pushed
the
fable/login-docs
branch
from
September 22, 2026 00:17
3b4c3b8 to
d27b44b
Compare
The access control section said the key was the whole story and that the dashboard asks for it on first open. With the front door login (#261) a person signs in with a name and a password and keeps a session; a key is what a program presents. Documentation only, and `CHANGELOG.md` is not touched. - **A new paragraph in Access control**: what a person presents and what a program presents, the two setup commands on the master (`ainode auth user add <name> --admin`, then `ainode auth enable`), accounts replicated from the master with sessions per node, the two roles, the account page and the Users page, `~/.ainode/users.json` at 0600 with hashes only, and a link to the docs site's new page. - **The installer paragraph** no longer says the dashboard asks for the key on first open, because a person signs in there now. - **The keyless list** gains `/api/auth/me` and `/api/auth/login`, with the reason for each: the page has to be able to ask whether you are signed in, and the request that signs you in cannot need a session first. The join paragraph's "one of five keyless paths" drops the count, which is the half that drifts (`tests/test_join_flow.py` asserts the paths, never a number). - **The CLI reference** gains `ainode auth user add|list|passwd|disable|enable| remove` and `ainode auth session list|revoke|clear`. No version number is claimed and no feature row is added: the release that carries the login names it in the release notes. Docs site page: https://docs.ainode.dev/security/sign-in (getainode/ainode-docs#8). Co-authored-by: webdevtodayjason <jason4mail@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
webdevtodayjason
force-pushed
the
fable/login-docs
branch
from
September 22, 2026 00:20
d27b44b to
727b25b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The README half of the front door login (#261). A person signs in to the dashboard with a name and a password now, and the session lasts until sign out or until an admin revokes it. Programs keep presenting an API key. The access control section said the key was the whole story, and that the dashboard asks for it on first open, so it described a node nobody will have after this ships.
Documentation only. No code, no test, no
CHANGELOG.md, and noAGENTS.md: the invariants belong to the three branches building the feature, not to this one.The docs site half is getainode/ainode-docs#8, which adds the page this README links to.
What changed
AINODE_AUTH=off, an update never changing an installed node's state) is untouched~/.ainode/users.jsonat 0600 with hashes only besideauth.json, and a link to the docs page/api/auth/meand/api/auth/login, each with its reason: the page has to be able to ask whether you are signed in, and the request that signs you in cannot need a session firsttests/test_join_flow.py::test_the_readme_lists_the_join_route_among_the_keyless_onesasserts the paths and deliberately not a number, because the count is the half that drifts (it already said four while the middleware had five once)ainode auth user add NAME --admin, then theuserverbs (list,passwd,disable,enable,remove) and thesessionverbs (list,revoke,clear) on one line each, beside theauth keylines that were already thereThe two commands, as the README now prints them:
Changelog text for the release PR
CHANGELOG.mdis not touched here. This is the entry for the release PR to carry, under Changed:Gates
Markdown only, so neither
pytestnorruffis a gate on this diff. The house em dash check, on this branch:The suite was not run here: this checkout has no
aiohttp, so every test module that importsainode.api.serverfails collection. Nothing in the diff is code, and the one test that reads the README for this area (tests/test_join_flow.py::TestDocs) is satisfied by inspection:POST /api/cluster/joinis still named, and every member ofSKIP_PATHSexcept/and/api/cluster/joinstill appears in backticks./api/auth/meand/api/auth/loginare in the README before they are inSKIP_PATHS, so that test keeps passing when the login branches land.Left out
AGENTS.mdedit. The users store, the session store and the login route are edit contracts owned by the branches writing them.